欢迎来到天天文库
浏览记录
ID:9147067
大小:158.61 KB
页数:15页
时间:2018-04-19
《实现atmega16单片机ad键盘与pc机的串口通信并用lcd1602显示程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实现ATmegal6单片机AD键盘与PC机的串口通信并用LCD1602显示程序平台ATmegal6编程软件CodeVisionAV实现功能:单片机与PC机(电脑)之间的串口通信。具体就是单片机最小系统上的AD键盘按键按下后发送键值到串口助手上显示,申口助手发送一串字符到最小系统上的lcdl602显示。(程序或有冗余)include<megal6.h>//include<delay.h>#asm.equ_Icd_port=0xl5;PORTC#endasm#include<lcd.h>#defineucharunsig
2、nedchar#defineuintunsignedint#defineRSPORTC.7#defineRWPORTC.6#defineEPORTC.5ucharflag;//标志位全局变量的定义#ifndefRXB8#defineRXB81#endif#ifndefTXB8#defineTXB80#endif#ifndefUPE//defineUPE2#endif#ifndefDOR//defineDOR3#endif#ifndefFE#defineFE4#endif#ifndefUDRE#defineUDRE5#endif#ifndefRXC#de
3、fineRXC7#endif#defineFRAMING^ERROR(l<<FE)#definePARITY_ERROR(l<<UPE)#defineDATA_OVERRUN(l<<DOR)#defineDATA_REGISTER_EMPTY(l<<UDRE)#defineRX_COMPLETE(l<<RXC)//USARTReceiverbuffer:接收器缓冲#defineRX_BUFFER_SIZE8charrx_buffer[RX_BUFFER_SIZE];#ifRXBUFFERSIZ
4、E<256unsignedcharrx_wr_index,rx_rd_index,rx_counter;#elseunsignedintrx_wr_index,rx_rd」ndex,rx_counter;#endif//ThisflagissetonUSARTReceiverbufferoverflowbitrx_buffer_overfIow;//USARTReceiverinterruptserviceroutine:接收器中断interrupt[USART_RXC]voidusart_rx_isr(void){charstatus,data
5、;status=UCSRA;/八卖取接受状态标志位data=UDR;//读取USART数据寄存器flag=l;//白定义接收标志位if((status&(FRAMING_ERROR
6、PARITY_ERROR
7、DATA_OVERRUN))==0)rx_buffer[rx_wr_index]=data;//将数据填充到接收缓冲队列中if(++rx_wr_index==RX_BUFFER_SIZE)//写指针指向下一个单元,并判断是否到了队列的尾部,(不表示接受缓冲区是否满!)rx_wr_index=O;//到了尾部,则指向头部(构成环状)if(++
8、rx_counter==RX_BUFFER_SIZE)//队列中收到字符加1,并判断是否队列己满rx_counter=0;//队列满了,队列中收到字符个数为0,表示队列中所有以前的数据作废,因为最后的数据己经把最前边的数据覆盖了rxbufferoverflow=l;//置缓冲区溢出标志。在主程序中必要的地方需要判断该标志,以证明读到数据的完整性};}#ifndef_DEBUG_TERMINAL_IO_#define_ALTERNATE_GETCHAR_#pragmaused+/********g¥#********chargetchar(void){c
9、hardata;while(rx_counter==0);//队列屮没有数掘可以读取,等待。。。data=rx_buffer[rx_rd」ndex];//读取缓冲队列中的数据if(++rx_rd」ndex==RX_BUFFER_SIZE)rx_rd_index=O;#asm("clin)//关中断-rx_counter;//队列屮未读数据个数减1#asm("sei")//开中断returndata;}#pragmaused-#endif//USARTTransmitterbuffer#defineTX_BUFFER_SIZE8chartx_buffer
10、[TX_BUFFER_SIZE];#ifTXBUFFERSIZE<256unsigned
此文档下载收益归作者所有