/****************************************************************************************************** 功能:串口調(diào)試助手發(fā)送數(shù)據(jù)給877,877收到后再轉(zhuǎn)發(fā)回串口助手*** 實驗內(nèi)容:通過PC端軟件“串口調(diào)試助手”c 發(fā)送數(shù)據(jù)給877,877把接到的數(shù)據(jù)發(fā)給電腦*** 開發(fā)板連接方法: 用串口線接上單片機開發(fā)板上的串口,另一端接到電腦9針串口上,如果沒有串口,請另購USB轉(zhuǎn)串口線****************************************************************************************************/#include //包含單片機內(nèi)部資源預定義__CONFIG(0xFF32); //芯片配置字,看門狗關,上電延時開,掉電檢測關,低壓編程關,加密,4M晶體HS振蕩#define rs RA5#define rw RA4#define e RA3unsigned char recdata;void init(); //申明I/O口初始化函數(shù)void lcd_init(); //申明LCD初始化函數(shù)void write(char x); //申明顯示1字節(jié)數(shù)據(jù)函數(shù)void lcd_enable(); //申明LCD顯示設置函數(shù)void delay(); //申明延時函數(shù)void writelcd(char *pt); //聲明LCD寫字符串函數(shù)/***************************************************************************** 名 稱:main()* 功 能:主函數(shù)* 入口參數(shù):無* 出口參數(shù):無* 說 明:無****************************************************************************/void main(){ TRISC=0XFF; //設置C口方向全為輸出 SPBRG=0XC; //設置波特率為19200BPS TXSTA=0X24; //使能串口發(fā)送,選擇高速波特率 RCSTA=0X90; //使能串口工作,連續(xù)接收 RCIE=0X1; //使能接收中斷 GIE=0X1; //開放全局中斷 PEIE=0X1; //使能外部中斷 init(); //調(diào)用I/O口初始化函數(shù) lcd_init(); //調(diào)用LCD初始化函數(shù) while(1) //等待中斷 { ; } }/***************************************************************************** 名 稱: usart()* 功 能:中斷函數(shù)* 入口參數(shù):* 出口參數(shù):* 說 明:注意要有關鍵字 interrupt 如果是多種中斷,在中斷服務函數(shù)中,要判斷中斷源標志****************************************************************************/void interrupt usart(void) { int i; if(RCIE&&RCIF) //判斷是否為串口接收中斷 { TXREG=RCREG;write(TXREG); //只能顯示3個字符,有問題???? } }/***************************************************************************** 名 稱:init()* 功 能:I/O口初始化****************************************************************************/void init(){ADCON1 = 0X07; //設置A口為普通I/O口 RA1=1;TRISA = 0X00; //設置A口為輸出TRISD = 0X00; //設置D口為輸出}/***************************************************************************** 名 稱:lcd_init()* 功 能:LCD初始化****************************************************************************/void lcd_init(){PORTD = 0X1; //清除顯示lcd_enable();PORTD = 0X38; //8位2行5*7點陣lcd_enable();PORTD = 0X0e; //顯示開,光標開,閃爍lcd_enable();PORTD = 0X06; //文字不動,光標右移lcd_enable();PORTD = 0X80; //公司web顯示地址lcd_enable();}/***************************************************************************** 名 稱:write()* 功 能:寫一個字節(jié)數(shù)據(jù)到LCD* 入口參數(shù):char x 字符****************************************************************************/void write(char x){PORTD = x; //待顯示數(shù)據(jù)送PORTD口rs = 1; //該字節(jié)數(shù)據(jù)為數(shù)據(jù),而不是命令rw = 0; //此次操作為寫,而不是讀e = 0; //拉低使能信號delay(); //保持使能信號為低一段時間e = 1; //拉高使能信號,建立LCD操作所需要的上升沿}/***************************************************************************** 名 稱:lcd_enable()* 功 能:LCD顯示設置****************************************************************************/void lcd_enable(){rs = 0; //該字節(jié)數(shù)據(jù)為命令,而不是數(shù)據(jù)rw = 0; //此次操作為寫,而不是讀e = 0; //拉低使能信號delay(); //保持使能信號為低一段時間e = 1; //拉高使能信號,建立LCD操作所需要的上升沿}/***************************************************************************** 名 稱:delay()* 功 能:延時****************************************************************************/void delay(){int i;for (i = 0;i < 5000;i++);}