欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機匯編利用pcf8591讀取光敏數據,顯示不正確 [打印本頁]

作者: 心靈的塵埃    時間: 2019-8-2 22:15
標題: 單片機匯編利用pcf8591讀取光敏數據,顯示不正確
剛學的匯編,想用匯編寫一個利用液晶顯示光敏數值的程序,液晶顯示部分的代碼沒什么問題正常顯示,燒錄到板子上顯示的好像是一些隨機的數,pcf8591的讀取程序有點問題,應該是發送一個字節數據或者接受數據部分的問題,但是我又看不出來是哪里的問題,所以想問讓各位大佬幫忙看一下,謝謝

        CMD EQU 40H
        DAT EQU 41H
        SDA EQU P2.0
        SCL EQU P2.1
        ORG 0H
        JMP START
        ORG 23H
        JMP SERVER
START:                 //初始化
        MOV SCON,#50H
        MOV TMOD,#20H
        MOV TH1,#0FAH
        MOV TL1,#0FAH
        SETB TR1
        SETB EA
        SETB ES
        MOV DPTR,#SHOW
        MOV CMD,#38H
        LCALL WRITE_CMD
        MOV CMD,#0CH
        LCALL WRITE_CMD
        MOV CMD,#01H
        LCALL WRITE_CMD
        MOV CMD,#06H
        LCALL WRITE_CMD
LOOP:                   //主函數
        LCALL SHOW_1602
        LCALL READ_ADD
        JMP LOOP
SHOW_1602:            //液晶顯示
        MOV CMD,#80H
        LCALL WRITE_CMD
        MOV A,R5
        MOV B,#10
        DIV AB
        MOV R4,B
        MOV B,#10
        DIV AB       
        MOVC A,@A+DPTR
        MOV DAT,A
        LCALL WRITE_DAT
        MOV A,B
        MOVC A,@A+DPTR
        MOV DAT,A
        LCALL WRITE_DAT
        MOV A,R4
        MOVC A,@A+DPTR
        MOV DAT,A
        LCALL WRITE_DAT       
        RET
READ_BUSY:               //1602讀取忙綠狀態
        MOV P0,#0FFH
        CLR P1.0
        SETB P1.1
        SETB P2.5
        MOV R2,P0
        CLR P2.5
        MOV A,#80H
        ANL A,R2
        JNZ READ_BUSY
        RET
WRITE_CMD:              //輸入指令
        LCALL READ_BUSY
        CLR P1.0
        CLR P1.1
        MOV P0,CMD
        SETB P2.5
        CLR P2.5
        RET
WRITE_DAT:              //輸入數據
        LCALL READ_BUSY
        SETB P1.0
        CLR P1.1
        MOV P0,DAT
        SETB P2.5
        CLR P2.5
        RET
START1:               //iic通訊起始信號
        SETB SCL
        SETB SDA
        LCALL DELAY_5US
        CLR SDA
        LCALL DELAY_5US
        RET
STOP:                //停止信號
        CLR SDA
        SETB SCL
        LCALL DELAY_5US
        SETB SDA
        LCALL DELAY_5US
        RET
ACK:                 //應答信號
        SETB SCL
        LCALL DELAY_5US
        CLR SCL
        RET
WRITE_BYTE:          //寫入一個字節指令
        MOV R6,#8
        MOV A,R7
D4:       
        RLC A
        MOV SDA,C
       
        CLR SCL
        LCALL DELAY_5US
        SETB SCL
        LCALL DELAY_5US
        DJNZ R6,D4
        CLR SCL
        SETB SDA
        RET
READ_BYTE:                //讀取一個字節數據
        MOV R6,#8
D5:SETB SCL
        LCALL DELAY_5US
        MOV C,SDA
        RLC A
        CLR SCL
        LCALL DELAY_5US       
        MOV R5,A
        DJNZ R6,D5

        CLR SCL
        SETB SDA
        RET
READ_ADD:                //讀取數據
        LCALL START1
        MOV R7,#90H+0
        LCALL WRITE_BYTE
        LCALL ACK
        MOV R7,#0
        LCALL WRITE_BYTE
        LCALL ACK
        LCALL START1
        MOV R7,#90H+1
        LCALL WRITE_BYTE
        LCALL ACK
        LCALL READ_BYTE
        LCALL STOP
        RET
SHOW:         
DB 30H
DB 31H
DB 32H
DB 33H
DB 34H
DB 35H
DB 36H
DB 37H
DB 38H
DB 39H
DELAY_1MS:
        MOV R0,#2
D1: MOV R1,#250
        DJNZ R1,$
        DJNZ R0,D1
        RET
DELAY_5US:
        NOP
        NOP
        NOP
        RET
SERVER:
        END


作者: csmyldl    時間: 2019-8-3 10:06
建議用PROTEUS畫出圖來,用KEIL+PROTEUS仿真調試檢查,學會了仿真調試,什么問題能能解決了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1