4*4鍵盤_8051_PC 組合語言 |
尚未結案
|
ojackieo
一般會員 ![]() ![]() 發表:1 回覆:0 積分:0 註冊:2009-09-05 發送簡訊給我 |
哀呀呀~
大瓶頸呀~ 有些小小問題想請大大們幫我想想辦法~~ 我在做4*4鍵盤輸入然後透過8051跟ICL232傳輸到PC顯示 我打了程式也燒了可是卻只能單向通訊 也就是說,我只能在8051端接收從PC傳來的數字"1,2,3,4...." 可是我要在鍵盤這邊輸入數字卻不能發送到PC端 我用Keil uVision3測試程式碼沒有錯誤,可是就無法 接線部分的問題,我有測試過了,我另外燒一顆只是單純的鍵盤_8051_P0輸出到LED 這是沒有問題的 不知道自己是哪裡出了問題,不知道有沒有大大可以幫我解決 電路圖 http://www.wretch.cc/blog/ojackieo/5545385 程式碼 ↓↓↓↓ D_RAM EQU 35H ;顯示器位址30H~35H dis_ptr EQU 21H ;顯示器掃描指標 key_ptr EQU 22H ;按鍵指標 ;DA REG P1.4 ;74C922接腳 ORG 00H JMP START ;主程式 ORG 0BH ;IMER0中斷 向量 JMP TIM0 ;TIMER0中斷副程式 ORG 23H JMP UART ;UART中斷副程式 ;-------------------------------------------------------------------- START: MOV SCON,#50H ;UART工作在MODE1 MOV TMOD,#20H ;TIMER1工作在MODE2 SETB EA SETB ES ;UART中斷致能 MOV TH1,#230 ;鮑率1200 SETB TR1 ;啟動TIMER1 MOV key_ptr,#0FFH ;按鍵開關RAM初值(最大) ;-------------------------------------------------------------------- SS1: JNB P1.4,$ ;是否有按鍵?DA=1表有按 MOV A,P1 ANL A,#0FH ;低4位元為按鍵碼 MOV key_ptr,A JB P1.4,$ MOV A,key_ptr ;按鈕放開,則依按鍵指標讀取按鍵碼 XCH A,D_RAM XCH A,D_RAM-1 XCH A,D_RAM-2 XCH A,D_RAM-3 XCH A,D_RAM-4 XCH A,D_RAM-5 JMP SS1 ;---------------------------------------------------------------------- TIM0: PUSH ACC ;PUSH PSW CLR RS0 SETB RS1 MOV TH0,#HIGH(65536-3000) ;重設計時中斷4000微秒=4毫秒 MOV TL0,#LOW(65536-3000) MOV A,dis_ptr ;將顯示器掃描值移至高4位元 SWAP A MOV B,A MOV A,dis_ptr ADD A,#30H ;顯示器記憶體定址30H 掃描值=目前顯示器位址 MOV R0,A MOV A,@R0 ;間接定址,顯示器記憶體內容讀入A ORL A,B ;掃描值 顯示值 ;----------------------------------------------------------------------- SS2: MOV key_ptr,A ;存入鍵盤RAM ;MOV D_RAM,A MOV P0,A ;輸出至P0顯示 INC dis_ptr CJNE A,#6,UA1 MOV dis_ptr,#0 MOV B,A ;暫存入B,以免被破壞 MOV DPTR,#TAB ANL A,#0FH ;讀取十位數ASCII碼 SWAP A MOVC A,@A DPTR MOV SBUF,A ;發送十位數 JNB TI,$ ;TI=1表發送完畢 CLR TI MOV A,B ;取回A MOV DPTR,#TAB ANL A,#0FH ;讀取個位數ASCII碼 MOVC A,@A DPTR MOV SBUF,A ;發送個位數 JNB TI,$ ;TI=1表發送完畢 CLR TI ; 清除T1 JMP SS1 ;---------------------------------------------------------接收 UART: PUSH ACC JNB RI,UA1 ;RI=0表是發送中斷,離開不處理 MOV A,SBUF ;RI=1為接收中斷,接收資料 CPL A MOV P2,A ;反相輸出至P2顯示 CLR RI ;清除接收旗號 UA1: ;POP PSW POP ACC RETI TAB: DB "0123456789ABCD#*" ;DB 00H,01H,02H,03H ;DB 04H,05H,06H,07H ;DB 08H,09H,0CH,0DH ;DB 0EH,0FH,0BH,0AH END |
handystudio
高階會員 ![]() ![]() ![]() ![]() 發表:1 回覆:81 積分:106 註冊:2005-03-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |