全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4348
推到 Plurk!
推到 Facebook!

4*4鍵盤_8051_PC 組合語言

尚未結案
ojackieo
一般會員


發表:1
回覆:0
積分:0
註冊:2009-09-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-05 15:00:23 IP:163.17.xxx.xxx 訂閱
哀呀呀~
大瓶頸呀~
有些小小問題想請大大們幫我想想辦法~~

我在做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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-03-02 02:13:26 IP:114.43.xxx.xxx 訂閱
    MOV        SBUF,A        ;發送十位數
在這行指令前面加 MOV P2,A 看看程式是否有跑到這裡,如果接收OK,應該是程式沒有跑到 MOV SBUF,A 這行指令
------
歡迎光臨 輕巧工作室
網站 http://www.handystudio.tw
控制電路板客製設計、製作交貨
8051專題製作/專題客製
系統時間:2024-04-19 22:12:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!