|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教MSC1210單片機串口通信的主函數(shù)編寫問題 |
| 作者:莊莊 欄目:單片機 |
#include <\ti\reg1210.h> #include <string.h> #define INBUF_LEN 4 //數(shù)據(jù)長度 #pragma asm CSEG AT 0807EH DB 11111100b //HCR1 Enable external MEMORY DB 11111110b //HCR0 1K data FLASH #pragma endasm unsigned CHAR inbuf1[INBUF_LEN]; unsigned CHAR CHECKSUM,count3; bit read_flag=0; void init_serialcomm(void) { SCON0= 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload PCON = 0x80; //SMOD=1; TH1 = 0xEC; //Baud:9600 fosc=11.0592MHZ IE = 0x90; //Enable Serial Interrupt TR1 = 1; //timer 1 run // TI=1; } //向串口發(fā)送一個字符 void send_CHAR_com(unsigned CHAR ch) { SBUF0=ch; while(TI==0); TI=0; } //向串口發(fā)送一個字符串,strlen為該字符串長度 void send_string_com(unsigned CHAR *str,unsigned int strlen) { unsigned int k=0; do { send_CHAR_com(*(str + k)); k++; } while(k < strlen); } //串口接收中斷函數(shù) void serial () interrupt 4 using 3 { EA=0; if(RI) { unsigned CHAR ch; RI = 0; ch=SBUF0; if(ch>127) { count3=0; inbuf1[count3]=ch; // CHECKSUM= ch-128; } else { count3++; inbuf1[count3]=ch; // CHECKSUM ^= ch; if(count3==(INBUF_LEN-1)) //&& (!CHECKSUM) ) { read_flag=1; //如果串口接收的數(shù)據(jù)達到INBUF_LEN個,且校驗沒錯, //就置位取數(shù)標(biāo)志 } } } EA=1; } main() { init_serialcomm(); //初始化串口 CKCON=0x17; while(1) { if(read_flag) //如果取數(shù)標(biāo)志已置位,就將讀到的數(shù)從串口發(fā)出 { read_flag=0; //取數(shù)標(biāo)志清0 send_string_com(inbuf1,INBUF_LEN); } 我在這個位置加入程序后,程序通信不能正確執(zhí)行,傳輸數(shù)據(jù)全部錯誤,為什么? } } 請高手指教,謝謝 |
| 2樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/21 10:30:00 發(fā)布:
請高手指教,謝謝 謝謝啦 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |