?? 2051_mc44817_pll.asm
字號:
; MCU AT89C2051,晶振4MHz,軟件控制鎖相環IC MC44817
; C68鄰頻調制器
; 作者:倪卸洪
; 版本V1.2 2006.9.20
TXBUF1 EQU 30H ;定義發送數據緩沖區
TXBUF2 EQU 31H
TXBUF3 EQU 32H
TXBUF4 EQU 33H
TXBUF5 EQU 34H
COUNT EQU 35H ;計數器
DPBUF EQU 36H
CHGBUF EQU 37H
LOOP EQU 38H
TIME EQU 39H
CHGBUF1 EQU 3AH
EN1 BIT P3.0
EN2 BIT P3.1
COM1 BIT P3.7
COM2_SDO BIT P3.5
COM3_CLK BIT P3.4
LOCK_A BIT P3.2
LOCK_V BIT P3.3
DATAO BIT 20H ;數據緩沖位
FCH_Z BIT 21H ;增補頻道標志
STR_F BIT 22H ;初始運行標記
LIGHT BIT 23H ;
;********************************
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP SERV
MAIN:
MOV P1,#0FFH
SETB COM3_CLK
SETB COM2_SDO
SETB COM1
SETB LOCK_A
SETB LOCK_V
CLR EN1
CLR EN2
CLR FCH_Z
MOV TIME,#2
MOV LOOP,#6 ;閃爍3次
MOV TH0,#7DH
MOV TL0,#0CAH
MOV TMOD,#01H
SETB ET0
SETB TR0
SETB EA
SETB STR_F ;置開機標記
SETB LIGHT ;數碼管點亮標記
AJMP READ_A
;********************************
SOUT:
JB DATAO,HBIT
CLR COM2_SDO
NOP
NOP
AJMP CLKO
HBIT: SETB COM2_SDO
NOP
NOP
CLKO: SETB COM3_CLK
NOP
NOP
NOP
CLR COM3_CLK
NOP
NOP
RET
;********************************
; 數據發送子程序
;********************************
TRX: MOV P1,#0FFH
MOV COUNT,#4
MOV A,TXBUF1
TX1: JB ACC.3,BDH
CLR DATAO
AJMP BITO
BDH: SETB DATAO
BITO: ACALL SOUT
RL A
DJNZ COUNT,TX1
MOV COUNT,#7
MOV A,TXBUF2
TD1: JB ACC.6,DAH1
CLR DATAO
AJMP SBT1
DAH1: SETB DATAO
SBT1: ACALL SOUT
RL A
DJNZ COUNT,TD1
MOV COUNT,#8
MOV A,TXBUF3
TD2: JB ACC.7,DAH2
CLR DATAO
AJMP SBT2
DAH2: SETB DATAO
SBT2: ACALL SOUT
RL A
DJNZ COUNT,TD2
MOV COUNT,#8
MOV A,TXBUF4
TD3: JB ACC.7,DAH3
CLR DATAO
AJMP SBT3
DAH3: SETB DATAO
SBT3: ACALL SOUT
RL A
DJNZ COUNT,TD3
MOV COUNT,#7
MOV A,TXBUF5
TD4: JB ACC.7,DAH4
CLR DATAO
AJMP SBT4
DAH4: SETB DATAO
SBT4: ACALL SOUT
RL A
DJNZ COUNT,TD4
RET
;********************************
; 讀取伴音分頻數據
;********************************
READ_A: MOV P1,#0FFH
CLR COM3_CLK
SETB EN1
SETB EN2
NOP
NOP
CLR P1.7
NOP
NOP
MOV A,P3
NOP
NOP
SETB P1.7
CLR EN1
CLR EN2
CPL A
ANL A,#00000011B
RL A
MOV R0,A
MOV DPTR,#TAB_A
MOVC A,@A+DPTR
MOV TXBUF2,A
INC R0
MOV A,R0
MOVC A,@A+DPTR
MOV TXBUF3,A
MOV TXBUF1,#00001111B
MOV TXBUF4,#11000000B
MOV TXBUF5,#00000100B
SETB EN1
NOP
NOP
NOP
ACALL TRX
NOP
NOP
CLR EN1
NOP
NOP
SETB COM2_SDO
SETB COM3_CLK
JB STR_F,STR1
ACALL DISP
ACALL DISP
ACALL DISP
ACALL DISP
ACALL DISP
AJMP READ_V
STR1: ACALL STR
;************************************
; 讀取頻道分頻數據
;*************************************
READ_V: MOV P1,#0FFH
CLR COM3_CLK
NOP
NOP
CLR P1.7
NOP
NOP
MOV A,P1
NOP
SETB P1.7
CPL A
ANL A,#01111111B
MOV R5,A
JZ AD
MOV A,R5
CLR C
SUBB A,#99
JC GOT
MOV A,#99
AJMP BD
GOT: MOV A,R5
AJMP BD
AD: MOV A,#1
BD: MOV DPBUF,A
DEC A
RL A
MOV R0,A
MOV DPTR,#TAB_V
MOVC A,@A+DPTR
MOV TXBUF2,A
INC R0
MOV A,R0
MOVC A,@A+DPTR
MOV TXBUF3,A
MOV TXBUF1,#00001111B
MOV TXBUF4,#01000001B
MOV TXBUF5,#01010000B
SETB EN2
NOP
NOP
NOP
ACALL TRX
NOP
NOP
CLR EN2
NOP
NOP
SETB COM2_SDO
SETB COM3_CLK
JB STR_F,STR2
ACALL DISP
ACALL DISP
ACALL DISP
ACALL DISP
ACALL DISP
AJMP READ_A
STR2: ACALL STR
AJMP READ_A
;********************************
; 顯示子程序
;********************************
DISP:
JB LOCK_A,ER1
JB LOCK_V,ER2
AJMP NEXT
ER1: SETB TR0
JB LIGHT,OFF
MOV P1,#86H
CLR COM1
ACALL D1MS
SETB COM1
MOV P1,#0AFH
CLR COM2_SDO
ACALL D1MS
SETB COM2_SDO
JB LOCK_V,ERR
MOV P1,#0F9H
CLR COM3_CLK
ACALL D1MS
SETB COM3_CLK
RET
ER2: SETB TR0
JB LIGHT,OFF
MOV P1,#86H
CLR COM1
ACALL D1MS
SETB COM1
MOV P1,#0AFH
CLR COM2_SDO
ACALL D1MS
SETB COM2_SDO
MOV P1,#0A4H
CLR COM3_CLK
ACALL D1MS
SETB COM3_CLK
RET
ERR:
MOV P1,#0AFH
CLR COM3_CLK
ACALL D1MS
SETB COM3_CLK
RET
OFF: MOV P1,#0FFH
ACALL D1MS
ACALL D1MS
ACALL D1MS
RET
;**********************************
NEXT: MOV A,DPBUF
CLR C
SUBB A,#58
JNC Z_CH
MOV A,#11000110B ;非增補顯示"C"
AJMP TODP
Z_CH: SETB FCH_Z
MOV R4,A
INC R4
MOV A,#10100111B ;增補顯示"c"
TODP: MOV P1,A
CLR COM1
ACALL D1MS
SETB COM1
JBC FCH_Z,CHZ
MOV A,DPBUF
AJMP TWO
CHZ: MOV A,R4
;************************************
; 16進制轉BCD,顯示頻道數
;************************************
TWO: MOV B,#10 ;分離十位和個位
DIV AB
MOV DPTR,#TAB_D
MOVC A,@A+DPTR
MOV P1,A
CLR COM2_SDO
ACALL D1MS
SETB COM2_SDO
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR COM3_CLK
ACALL D1MS
SETB COM3_CLK
RET
;************************************
; 閃爍顯示"888"
;************************************
STR: JB LIGHT,L1
MOV P1,#80H
CLR COM1
ACALL D1MS
SETB COM1
CLR COM2_SDO
ACALL D1MS
SETB COM2_SDO
CLR COM3_CLK
ACALL D1MS
SETB COM3_CLK
RET
L1: MOV P1,#0FFH
ACALL D1MS
ACALL D1MS
ACALL D1MS
RET
;************************************
; 伴音分頻比
;************************************
TAB_A:
DB 06H,80H ;6.5MHz
DB 06H,00H ;6.0MHz
DB 05H,80H ;5.5MHz
DB 04H,80H ;4.5MHz
;************************************
; 頻道頻率對應表
;************************************
TAB_V:
DB 0AH,0F8H ;CH1
DB 0BH,0F8H ;CH2
DB 0CH,0F8H ;CH3
DB 0EH,68H ;CH4
DB 0FH,68H ;CH5
DB 19H,0C8H ;CH6
DB 1AH,0C8H ;CH7
DB 1BH,0C8H ;CH8
DB 1CH,0C8H ;CH9
DB 1DH,0C8H ;CH10
DB 1EH,0C8H ;CH11
DB 1FH,0C8H ;CH12
DB 3FH,0A8H ;CH13
DB 40H,0A8H ;CH14
DB 41H,0A8H ;CH15
DB 42H,0A8H ;CH16
DB 43H,0A8H ;CH17
DB 44H,0A8H ;CH18
DB 45H,0A8H ;CH19
DB 46H,0A8H ;CH20
DB 47H,0A8H ;CH21
DB 48H,0A8H ;CH22
DB 49H,0A8H ;CH23
DB 4AH,0A8H ;CH24
DB 50H,0A8H ;CH25
DB 51H,0A8H ;CH26
DB 52H,0A8H ;CH27
DB 53H,0A8H ;CH28
DB 54H,0A8H ;CH29
DB 55H,0A8H ;CH30
DB 56H,0A8H ;CH31
DB 57H,0A8H ;CH32
DB 58H,0A8H ;CH33
DB 59H,0A8H ;CH34
DB 5AH,0A8H ;CH35
DB 5BH,0A8H ;CH36
DB 5CH,0A8H ;CH37
DB 5DH,0A8H ;CH38
DB 5EH,0A8H ;CH39
DB 5FH,0A8H ;CH40
DB 60H,0A8H ;CH41
DB 61H,0A8H ;CH42
DB 62H,0A8H ;CH43
DB 63H,0A8H ;CH44
DB 64H,0A8H ;CH45
DB 65H,0A8H ;CH46
DB 66H,0A8H ;CH47
DB 67H,0A8H ;CH48
DB 68H,0A8H ;CH49
DB 69H,0A8H ;CH50
DB 6AH,0A8H ;CH51
DB 6BH,0A8H ;CH52
DB 6CH,0A8H ;CH53
DB 6DH,0A8H ;CH54
DB 6EH,0A8H ;CH55
DB 6FH,0A8H ;CH56
DB 70H,0A8H ;CH57
;*****************************************************
; 以下為增補頻道
;*****************************************************
DB 12H,0C8H ;Z1
DB 13H,0C8H ;Z2
DB 14H,0C8H ;Z3
DB 15H,0C8H ;Z4
DB 16H,0C8H ;Z5
DB 17H,0C8H ;Z6
DB 18H,0C8H ;Z7
DB 20H,0C8H ;Z8
DB 21H,0C8H ;Z9
DB 22H,0C8H ;Z10
DB 23H,0C8H ;Z11
DB 24H,0C8H ;Z12
DB 25H,0C8H ;Z13
DB 26H,0C8H ;Z14
DB 27H,0C8H ;Z15
DB 28H,0C8H ;Z16
DB 29H,0C8H ;Z17
DB 2AH,0C8H ;Z18
DB 2BH,0C8H ;Z19
DB 2CH,0C8H ;Z20
DB 2DH,0C8H ;Z21
DB 2EH,0C8H ;Z22
DB 2FH,0C8H ;Z23
DB 30H,0C8H ;Z24
DB 31H,0C8H ;Z25
DB 32H,0C8H ;Z26
DB 33H,0C8H ;Z27
DB 34H,0C8H ;Z28
DB 35H,0C8H ;Z29
DB 36H,0C8H ;Z30
DB 37H,0C8H ;Z31
DB 38H,0C8H ;Z32
DB 39H,0C8H ;Z33
DB 3AH,0C8H ;Z34
DB 3BH,0C8H ;Z35
DB 3CH,0C8H ;Z36
DB 3DH,0C8H ;Z37
DB 4BH,0A8H ;Z37
DB 4CH,0A8H ;Z39
DB 4DH,0A8H ;Z40
DB 4EH,0A8H ;Z41
DB 4FH,0A8H ;Z42
;********************************
; 段碼表
;********************************
TAB_D:
DB 0C0H,0F9H
DB 0A4H,0B0H
DB 99H, 92H
DB 82H, 0F8H
DB 80H, 90H
;********************************
; 中斷服務
;********************************
SERV: PUSH ACC
PUSH PSW
DJNZ TIME,REDO
MOV TIME,#2
CPL LIGHT
DJNZ LOOP,REDO
MOV TH0,#7DH
MOV TL0,#0CAH
CLR STR_F
JB LOCK_A,REDO
JB LOCK_V,REDO
CLR TR0
REDO: POP PSW
POP ACC
RETI
;********************************
; 1MS延時程序
;********************************
D1MS:
MOV R7,#20
LOOPS: MOV R6,#30
DJNZ R6,$
DJNZ R7,LOOPS
RET
;********************************
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -