|
|||||||||||
| 技術(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 |
怎么把這段匯編改為c語言?(紅外接收) |
| 作者:lluct 欄目:單片機 |
這段程序?qū)嵲诳床欢?想c嵌入?yún)R編不成功.請各位大哥大姐幫我一下.起碼告訴我這段程序的運行原理.在此謝謝了. ;--------------------------------------------------- ; IR 譯碼子程序 ;--------------------------------------------------- IR_IN: MOV R0,#IRCOM ;20H-23H I1: JNB IRIN,I2 ;等待 IR 信號出現(xiàn) JMP I1 I2: MOV R4,#20 I20: CALL DEL ;延時子程序 DJNZ R4,I20 ;JB IRIN,I1 ;確認IR信號出現(xiàn) I21: JB IRIN,I3 ;等 IR 變?yōu)楦唠娖?br> CALL DEL JMP I21 I3: MOV R3,#0 ;8位數(shù)清為0 LL: JNB IRIN,I4 ;等 IR 變?yōu)榈碗娖?br> CALL DEL JMP LL I4: JB IRIN,I5 ;等 IR 變?yōu)楦唠娖?br> CALL DEL JMP I4 I5: MOV R2,#0 ;0.14ms 計數(shù) L1: CALL DEL JB IRIN, N1 ;等 IR 變?yōu)楦唠娖?br> ;IR=0,檢查R2中的計數(shù)值 MOV A,#8 CLR C SUBB A,R2 ;判斷高低位 ;IF C=0 BIT=0 MOV A,@R0 RRC A MOV @R0,A ;處理完一位 INC R3 CJNE R3,#8,LL ;需處理完8位 MOV R3,#0 INC R0 CJNE R0,#24H,LL ;收集到4字節(jié)了 JMP IR_SHOW N1: INC R2 CJNE R2,#30,L1 ;0.14ms 計數(shù)過長則時間到自動離開 RET ;------------------------------------------------ ; DELAY R5*0.14MS DEL: MOV R5,#1 ;IR解碼使用 DEL0: MOV R6,#2 DEL1: MOV R7,#32 DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 DJNZ R5,DEL0 RET DELAY1: ;延時5MS MOV R6,#25 DL2: MOV R7,#100 DJNZ R7,$ DJNZ R6,DL2 RET ;--------------------------------- * - 本貼最后修改時間:2006-1-4 2:33:34 修改者:lluct |
| 2樓: | >>參與討論 |
| 作者: xwj 于 2006/1/4 7:54:00 發(fā)布:
不太好,的延時查詢方法,最好用狀態(tài)機 |
|
| 3樓: | >>參與討論 |
| 作者: myway 于 2006/1/4 9:59:00 發(fā)布:
我的網(wǎng)站有C代碼 |
|
| 4樓: | >>參與討論 |
| 作者: lluct 于 2006/1/4 11:41:00 發(fā)布:
好像不行.改了以后 #include <reg52.h> #include <intrins.h> #define uCHAR unsigned CHAR sbit IRIN = P2^4; uCHAR temp20h[4]; uCHAR timeCount; uCHAR count; uCHAR bitCount; void irShow(void); void irIn(void); void delayMs (unsigned CHAR ms); void main (void) { temp20h[0] = 0x00; temp20h[1] = 0x00; temp20h[2] = 0x00; temp20h[3] = 0x00; IRIN = 1; temp20h[2] = 0xff; irShow(); irIn(); } //=============================================== void irIn (void) { uCHAR i = 0; while(IRIN); delayMs(2); while(!IRIN); bitCount = 0; LL: while(IRIN) { delayMs(2); } while(!IRIN) { delayMs(2); } timeCount = 0; while(1) { delayMs(2); while(!IRIN) { count = 8; count = timeCount - count; temp20h[i] |= CY; temp20h[i] >>= 1; if (bitCount != 8) { goto LL; } bitCount = 0; i++; if (i != 4) { goto LL; } goto END_IR; } timeCount++; if (timeCount == 15) { goto END_IR; } } END_IR: irShow(); } void irShow (void) { if (temp20h[3] == !temp20h[2]) { P0 = temp20h[3]; } } //=============================================== void delayMs (unsigned CHAR ms) { unsigned CHAR i; while (--ms) { for (i = 0; i < 125; i++); } } |
|
| 5樓: | >>參與討論 |
| 作者: jackf125 于 2006/1/5 9:42:00 發(fā)布:
! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |