|
|||||||||||
| 技術(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 |
單片機菜鳥的問題,請大家?guī)兔ρ,在線等 |
| 作者:bhc1981 欄目:單片機 |
| 2樓: | >>參與討論 |
| 作者: bhc1981 于 2005/12/15 19:49:00 發(fā)布:
剛才忘了寫主題了 我用單片機接收AD的12bit的數(shù)據(jù)后,怎樣才能通過SBUF連續(xù)串口輸出這12位的數(shù)據(jù),SBUF是8位的不是嗎?這個時候停止位和奇偶校驗位怎么設(shè)置? 還有就是51的異步通信的字符幀格式可以自己設(shè)定嗎? 先謝謝各位大哥的幫助 |
|
| 3樓: | >>參與討論 |
| 作者: 莊莊 于 2005/12/16 9:06:00 發(fā)布:
送你段程序,自己看看吧 #include <\ti\reg1210.h> //單片機為MSC1210 #include <string.h> #define INBUF_LEN 4 //數(shù)據(jù)長度 #pragma asm //單片機特殊定義,51不用 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ù)標志 } } } EA=1; } main() { init_serialcomm(); //初始化串口 CKCON=0x17; while(1) { if(read_flag) //如果取數(shù)標志已置位,就將讀到的數(shù)從串口發(fā)出 { read_flag=0; //取數(shù)標志清0 send_string_com(inbuf1,INBUF_LEN); // send_string_com("3",1); // send_string_com("3",1); // send_string_com("3",1); } } } |
|
| 4樓: | >>參與討論 |
| 作者: good_ys 于 2005/12/16 9:11:00 發(fā)布:
普通51這樣! SBUF是8位的; 奇偶校驗根據(jù)你發(fā)送的數(shù)據(jù)設(shè)置TB8位。也可不效驗; 51的異步通信的字符幀格式只能設(shè)置為8位或9位數(shù)據(jù)模式; 通過51的UART發(fā)送12bit數(shù)據(jù),可把數(shù)據(jù)分開發(fā)送,一次發(fā)8位,一次發(fā)4位。 如果模擬UART發(fā)送數(shù)據(jù)位數(shù)可隨自己定。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |