ผมทำมินิโปรเจคครับ จารย์ให้หาแล้วไปเสนอ พอเสนอผ่านก็ต้องทำรายงานส่ง
แต่มันติดตรงที่ว่า พอมารัยใน 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
ช่วยแก้ไขจุดบกพร่องที่ครับ ภาษา ASM ในการเขียน mcs-51
แต่มันติดตรงที่ว่า พอมารัยใน proteus แล้วมันเกิด cpu over load เลยไม่ทราบว่าผิดที่จุดใด
อยากให้มือโปรช่วยแก้ไขให้ที่ครับ และจุดสงสัยที่ผมไม่เข้าใจอีกที่นึงคือที่ loop L1 "$" หมายถึงอะไร
นี่คือ เว็ปที่มาครับ http://www.thaiembedded.com/download/miniorgan_89c52.asm
นนี่คือโค้ที่ผมเอามาเขียนแก้จุดผิดเล็กน้อยไปแล้ว
;*********************************
;Microcontroller mini organ
;Pragrammer
;*********************************
;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