PIC单片机CCS之C语言(#BYTE的用法)
N_C6, rcv=PIN_C7 //
#else //若有定义__PCB__,则执行下面的语句;
#define NORMAL_RS232 baud=9600, xmit=PIN_B1, rcv=PIN_B0
#endif //结束if定义
#define set_options(value) {#ASM \
MOVLW value \
OPTION \
#ENDASM}
#define debug(x) printf("%s variable value is %d\r\n",#x,x);
//用debug(x)代替printf("%s variable value is %d\r\n",#x,x);;
#define TOSTRING(s) #s //用TOSTRING(s)代替#s
#define DEVICE_FILE_FOR(chip) TOSTRING(chip##.h)
#ifdef __pcb__ //若有定义__PCB__,则执行下面的语句;
#define IDLE {if(kbhit()) isr();} //用IDLE代替{if(kbhit()) isr();}
//若getc()读到数据,则kbhit()返回1,否则, kbhit()返回0
#else //若没有定义__PCB__,则执行下面的语句;
#define IDLE ; //用IDLE代替; ;
#endif //结束if定义
#include DEVICE_FILE_FOR(16C74) //包含16C74.h头文件
#fuses HS,NOPROTECT //HS:高速晶振/谐振器, NOPROTECT:程序存储器代码不保护
#use delay(clock=MHZ(20)) //使能内置函数的功能:delay_ms()和delay_us()
//#USE DELAY()必须在#use rs232()使用之前出现.
#use RS232(NORMAL_RS232) //使用波特率为9600,
//发送脚为PIN_C6
//接收脚为PIN_C7
//使能内置函数:GETC,PUTC和PRINTF, kbhit();
int buffer[BUFFERSIZE]; //声明buffer[10]数组
int next_in, next_out; //声明整型变量next_in和next_out
#ifndef __pcb__ //若没有定义__PCB__,则执行下面的语句;
#int_rda //RS232接收到的数据有用,指定下面的函数是一个中断函数
#endif //结束if定义
void isr() {
buffer[next_in]=getc(); //从RS232口读数据
next_in=(next_in+1)%BUFFERSIZE; //将next_in加1后,除以10,将商赋给next_in
}
void main() {
int x, largest; //声明整型变量x和largest
set_options(0x34); //用汇编设置option寄存器,将预分频器留给Timer0使用
//分频比为1:32, Timer0的时钟源选择外部时钟;
// Timer0在下降沿递增计数;INT脚电平下降沿触发中断
//使能GPIO上拉
#ifndef __pcb__ //若没有定义__PCB__,则执行下面的语句;
enable_interrupts(INT_RDA); //使能UART接收中断
enable_interrupts(GLOBAL); //使能总中断
#endif //结束if定义
next_in=next_out=0; //初始化变量next_in 和next_out
largest=0; //初始化变量largest
do {
while(BUFFER_EMPTY) //当next_in=next_out时
IDLE; //若定义__PCB__,则用IDLE代替{if(kbhit()) isr();}
//若getc()读到数据,则kbhit()返回1,否则, kbhit()返回0
//若没有定义__PCB__,则用IDLE代替;
x=buffer[next_out];
next_in=(next_out+1)%BUFFERSIZE; //将next_out加1后,除以10,将商赋给next_in
largest = max(largest,x); //求最大值
debug(next_in); //用debug(x)代替printf("%s variable value is %d\r\n",#x,x);;
debug(next_out) //用debug(x)代替printf("%s variable value is %d\r\n",#x,x);;
} forever; //用forever代替表达式while(1)
}上面的例子是通过UART接收10个数据,求其最大值
PIC单片机CC 相关文章:
- PIC单片机用CCP1模块产生10位PWM波形程序(11-30)
- PIC单片机CCS之C语言(#USE I2C)(11-17)
- PIC单片机CCS之C语言(#BIT的用法)(11-17)
- PIC单片机CCS之C语言(#DEVICE的用法)(11-17)
- PIC单片机CCS之C语言(#TYPE的用法)(11-17)
- PIC单片机CCS之C语言(#FUSES的用法)(11-17)