微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC单片机CCS之C语言(#BYTE的用法)

PIC单片机CCS之C语言(#BYTE的用法)

时间:11-17 来源:互联网 点击:

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个数据,求其最大值

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top