51单片机串口通信程序- /******串口中断接口说明*************
- 功能:发送1帧数据/接收1字节数据
- void fillTCOMData (unsigned char buffer[5]);//buffer[5]需要串口发送的数组
- unsigned char cRCOMData; //暂存从串口接收的数据
- *****************************/
- #include <REG52.h> // SFR declarations
- //,,,,,,接口变量,,,,,,,,,,,,,,,,,,,,
- unsigned char cRCOMData; //暂存从串口接收的数据
- //,,,,,,模块内变量,,,,,,,,,,,,,,,,,,,,
- unsigned char cTCOMData[7]; //暂存向串口发送的数据(一组数据发送完成以后才接受下一组)
- unsigned char cTCOMDataN; //向串口发送数据的剩余个数
- void fillTCOMData (unsigned char buffer[7]) {
- //此处只负责填充数据, 主程序负责发送串口
- if (cTCOMDataN == 0)
- {
- cTCOMData[0] = buffer[0];
- cTCOMData[1] = buffer[1]; //ADC0H
- cTCOMData[2] = buffer[2]; //ADC0M
- cTCOMData[3] = buffer[3]; //ADC0L
- cTCOMData[4] = buffer[4];
- cTCOMData[5] = buffer[5];
- cTCOMData[6] = buffer[6];
-
-
- cTCOMDataN = 7; //赋值--允许串口发送数据
- TI=1; //启动串口中断
- }
- }
- void UART_ISR() interrupt 4 {
- if (TI) { //发送中断。发送完成(TI0位被置1)时将产生一个中断。
- TI = 0; //中断服务硬件不清除UART0中断标志,必须用软件清除。
- if (cTCOMDataN) { //将ADC0转换结果传出(5个字节).
- SBUF = cTCOMData[7 - cTCOMDataN];
- cTCOMDataN--;
- }
- }
- else //RI0=1
- {
- RI = 0;
- //add your code here!
- cRCOMData=SBUF;
- //SBUF0 = cSCOMData;
- }
- }
- void UART_Init() {
- TMOD = 0x20|TMOD; //定时器1作为波特率发生器
- IE = 0x10 | IE; //串口中断允许。位7-0:EA,ESPI0,ET2,ES0,ET1,EX1,ET0,EX0
- SCON = 0x50; //SCON0: 8-bit variable bit rate 接收允许
- TCON = 0x40;
- //CKCON = 0x01; //无->9600 0x01->19200
- TH1 = 0xfd; //0x96->9600 0x61->19200
- //TI0 = 1;
-
- //19200BPS
- //CKCON = 0x08;
- //TH1 = 0xB1;
- }
复制代码
|