|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
求助,關(guān)于模擬串口的C程序問題 |
| 作者:saintljb 欄目:單片機(jī) |
/****************************************************************** 器件:ATMEGA8 編譯器:ICCAVR6.26A 文件:模擬串口接收 ******************************************************************/ /*說明:串行信號(hào)發(fā)送到(INT1)PD3,利用INT1外部中斷和一個(gè)定時(shí)器timer1來達(dá)到接收信號(hào)的目的.有下降沿信號(hào)在INT1觸發(fā)中斷后,啟動(dòng)T1定時(shí)器,同時(shí)關(guān)閉此INT1外部中斷,根據(jù)模擬串口的波特率,不斷掃描INT1的電平,每位掃描3次,取2次相同的電平,得到該位的值,識(shí)別啟動(dòng)位數(shù)據(jù)位,奇偶校驗(yàn)位.取出八位數(shù)據(jù)位整合為一個(gè)字節(jié),存入模擬串口接收寄存器,并啟動(dòng)模擬接收標(biāo)志位Rx_m_flag,在其它定時(shí)器里處理*/ void int1_isr(void) { if((MCSR&(1<<WFST))!=0&&((PIND&0x08)==0)) //(1) { CLTBIT(GICR,INT1); SETBIT(TIMSK,TOIE1); SETBIT(TIFR,TOV1); } } //注(1):MCSR 為一個(gè)uchar, 用作在通訊時(shí)的狀態(tài)指示,WFST是Wait_for_Start指示 void rx_isr(void) { if((PIND&0x08)==0) CTL++; else CTH++; if(CTH+CTL>MAXDETECT-1) //MAXDETECT 為三次 { Bit[CTB]=CTH>CTL?1:0; CTH=0; CTL=0; if(CTB==0&&Bit[0]!=0)//啟始位錯(cuò)誤 { CTB=9; } else if(CTB==9) //偶校驗(yàn) { if(!((XOFF%2==0&&Bit[CTB]==0)|| (XOFF%2!=0&&Bit[CTB]!=0))) { //錯(cuò)誤 //錯(cuò)誤處理 } else { Rx_m_data=Bit[1]+Bit[2]<<1+Bit[3]<<2+Bit[4]<<3 +Bit[5]<<4+Bit[6]<<5+Bit[7]<<6+Bit[8]<<7; RX_M_BUFF[RX_M_HEAD]=Rx_m_data RX_M_HEAD++; Rx_m_flag=1; } XOFF=0; } else if(Bit[CTB]>0) XOFF++; //偶校驗(yàn)記數(shù) if(++CTB>9) { CTB=0; CLTBIT(TIMSK,TOIE1); SETBIT(GICR,INT1); CLTBIT(MCSR,WFST); } } } void timer1_init(void) { TCCR1A=0x00; TCCR1B=0x01; TCNT1=336; //波特率 為 7182(非標(biāo)) } void timer1_ovf_isr(void) { TCNT1=336; CLI(); rx_isr(); SEI(); } 請(qǐng)各位高手看一下到底是什么問題,我頭都痛了,謝謝大家 |
| 2樓: | >>參與討論 |
| 作者: saintljb 于 2004/4/21 11:25:00 發(fā)布:
另外,喂狗在另一個(gè)定時(shí)器里 |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |