標(biāo)題: 單片機(jī)奇怪問題 [打印本頁]

作者: iritwq    時間: 2016-6-8 20:06
標(biāo)題: 單片機(jī)奇怪問題
單片機(jī)STC89C52RC,初學(xué)驅(qū)動數(shù)碼管,按照思路是先顯示一遍0-9,下來就不斷循環(huán)顯示1-9,proteus仿真一切正常,但是把程序燒寫到芯片上之后只能顯示0-9一次,然后就不顯示了。但是刪掉 jnb p1.3,Set3 這句,就一切OK了,真是奇怪,求助壇友怎么處理才好
完整程序如下:


ORG  0000H  ;ORG偽指令來規(guī)定程序的起始地址
     LJMP    MAIN

ORG 0060H                  ;數(shù)據(jù)表:
    DB 03FH,0FFH,   03FH,0FEH,   03FH,0FDH,   03FH,0FBH,   03FH,0F7H           ;顯示設(shè)定圈數(shù)的數(shù)值,兩個一組前一數(shù)字是字模,后一位數(shù)字是顯示該字的選通碼
    DB 03FH,0FFH,   03FH,0EFH,   03FH,0DFH,   03FH,0BFH,   03FH,07FH           ;顯示實際圈數(shù)的數(shù)值,前一數(shù)字賦值給P0,后一數(shù)字賦值給P2,對應(yīng)的數(shù)碼管亮一下   
    DB 03FH, 006H, 05BH, 04FH, 066H, 06DH, 07DH, 007H, 07FH, 06FH               ;正置數(shù)碼管顯示0~9, 0-9字模的存儲位置

ORG  0100H

MAIN:  
  
  mov p1,#0FFh        ;初始化P1口,P1外接按鍵控制顯示的數(shù)字
  call test           ;讓各數(shù)碼管從0顯示到9以檢測顯示正常與否


start:   
    jnb p1.0,SET0        ;如果Bit不是1,跳轉(zhuǎn)到start1
    jnb p1.1,Set1         ;如果Bit是1,跳轉(zhuǎn)set2
    jnb p1.2,Set2
   
    jnb p1.3,Set3                ;這句刪掉就能正常顯示

    jnb p1.4,Set4
    jnb p1.5,Set5
    jnb p1.6,Set6
    jnb p1.7,Set7  
    call test
    JMP start

SET0:
    JMP start
SET1:
    JMP start
SET2:
    JMP start
SET3:
    JMP start
SET4:
    JMP start
SET5:
    JMP start
SET6:
    JMP start
SET7:
    JMP start
;======================== test:讓所有數(shù)碼管從0顯示到9 ======================================
test:
   mov p0,#03Fh      ;把數(shù)字0的字模送入P0
   mov p2,#000h      ;設(shè)置p2口為低電平,此時所有數(shù)碼管都顯示
   mov r1,#074h          ; 0-9字模的存儲位置,從這個數(shù)開始增加,尋找與當(dāng)前顯示的數(shù)字對應(yīng)的數(shù),然后找出下一個數(shù)存入顯示的位置
different:  
   mov a,r1
   inc R1      
   MOVC   A, @A+DPTR    ;把 數(shù)據(jù)表中的第一個數(shù)據(jù)讀到A里,A中的值就是調(diào)試時觀察窗口里ACC的值
   mov r2,p0
   XRL A, r2            ; A與R2中的數(shù)據(jù)進(jìn)行異或操作,結(jié)果放在A中。異或,相同為“0”,相異為“1”。
   jz   next                ;A中內(nèi)容為0,說明找到了目前顯示的數(shù)字的字模,就把下一個字模放到當(dāng)前位置
   jmp  different
next:
   MOV A,R1                 ;否則可以增加數(shù)字,R1中的數(shù)字作為相對地址尋址找到下一個數(shù)字的代碼送入P0
   MOVC   A, @A+DPTR  
   mov p0,a
   MOV R4,#0H
pause:
   INC R4
   mov A,R4
   XRL A, #0FFh        ;設(shè)置每個數(shù)字顯示的時間
   JZ continue
   MOV A,R1
   CALL DELAY  
   MOV R1,A
   JMP pause
continue:
   mov A,R1
   XRL A,#07Eh  
   jz  testOK
   jmp  different
testOK:
   ret

;======================== DELAY: 延時子程序 ===========================

DELAY:
    MOV R6,#04H
DL0:
    MOV R5,#0F8H
    DJNZ R5,$
    DJNZ R6,DL0
    NOP
    RET
END

作者: iritwq    時間: 2016-6-8 21:11
已解決,是芯片壞了




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