ช่วยแก้ไขจุดบกพร่องที่ครับ ภาษา ASM ในการเขียน mcs-51

ผมทำมินิโปรเจคครับ จารย์ให้หาแล้วไปเสนอ พอเสนอผ่านก็ต้องทำรายงานส่ง
แต่มันติดตรงที่ว่า พอมารัยใน proteus แล้วมันเกิด cpu over load เลยไม่ทราบว่าผิดที่จุดใด
อยากให้มือโปรช่วยแก้ไขให้ที่ครับ และจุดสงสัยที่ผมไม่เข้าใจอีกที่นึงคือที่ loop L1  "$" หมายถึงอะไร
นี่คือ เว็ปที่มาครับ http://www.thaiembedded.com/download/miniorgan_89c52.asm
นนี่คือโค้ที่ผมเอามาเขียนแก้จุดผิดเล็กน้อยไปแล้ว

;*********************************
;Microcontroller mini organ
;Pragrammerเค้าล้อเล่นratchaya Tongthong    
;*********************************
;P3.5 ----> SPEAKER    
MSEC        EQU        7FH
KEY            EQU        7CH  
S_CODE        EQU        7DH
NOTE1        EQU        7BH
NOTE2        EQU        7AH
KEYBUF        EQU        79H
PNTERHI        EQU        78H
PNTERLO        EQU        77H
DURATION    EQU        76H
;***********************************************
;Start  Scan key
;***********************************************

INIT:                ACALL  SCAN  
            CJNE    A,#00,SONG
            SJMP    INIT
            
SCAN:        MOV        S_CODE,#00H              
            MOV        P1,#0FFH        
            SETB    P3.0
            SETB    P3.1
            SETB    P3.2  
            
            CLR     P3.0      ;Scan first column
            MOV        A,P1
            CJNE    A,#0FFH,CONVERT
            SETB    P3.0
            MOV        A,S_CODE      
            ADD        A,#08
            MOV        S_CODE,A  
                                                            
            CLR        P3.1      ;Scan second column
            MOV        A,P1
            CJNE    A,#0FFH,CONVERT
            SETB    P3.1    
            MOV        A,S_CODE      
            ADD        A,#08
            MOV        S_CODE,A  
            
            CLR        P3.2      ;Scan third column
            MOV        A,P1    
            SETB    P3.2    
            CJNE    A,#0FFH,CONVERT
            MOV        S_CODE,#00H
            SJMP    ENDD
CONVERT:    INC        S_CODE    
            JNB        ACC.0,ENDD
            RR        A
            SJMP    CONVERT
ENDD:        MOV        KEY,S_CODE    
            MOV        A,KEY
            CJNE    A,#00,ENDD1
            RET
                    
ENDD1:        MOV        DPTR,#NOTE_1  
            MOV        A,KEY
            MOVC    A,@A+DPTR
            MOV        NOTE1,A                
            MOV        DPTR,#NOTE_2  
            MOV        A,KEY
            MOVC    A,@A+DPTR
            MOV        NOTE2,A
            RET
            
;***********************************************
;Generate Tone
;***********************************************
SONG:        CLR        P3.5
            ACALL    PERIOD
            SETB    P3.5
            ACALL    PERIOD
            MOV        P1,#0FFH
            MOV        A,P1
            CJNE    A,#0FFH,SONG
            SJMP    INIT
PERIOD:        MOV        R0,NOTE1
L1:            MOV        R1,#48
            DJNZ    R1,$
            NOP
            DJNZ    R0,L1
            MOV        R0,NOTE2
            DJNZ    R0,$
            RET
;***********************************************
;Note1 and Note2
;***********************************************  
NOTE_1:        DB        0,23,20,18,17,16,15,14,13,13,12,11,10,10,9,9,8,8,7,7,6
NOTE_2:        DB        0,20,42,27,24,23,28,33,42,08,17,32,48,18,38,11,34,9,36,14,43
                   END
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่