📄 pll-mb1504-asm.txt
字号:
;PLL锁相环频率合成控制器MB1501/MB1504置频参考汇编程序
;
;程序编写作者:飞奔 程序仅供参考 不提供任何技术支持! 经测试是成功的
;
;调频天空:http://www.fmdiy.com 雨飞电子:http://www.yufik.com
;
;电子技术研究协会:http://dx.fmdiy.com
;
;程序功能: 设置MB1501/MB1504频率为380MHz
;
;晶振19.2MHz,基准频率50K,R值取384,N值取118,A值取48
;
;******************************************************************
LE8 EQU P1.0 ;定义使能端口
DA8 EQU P1.1 ;定义数据端口
CK8 EQU P1.2 ;定义时钟端口
ORG 0000H
SJMP START
ORG 0030H
;******************************************************************
; 主程序开始
START: CLR LE8 ;使能置0
CLR CK8 ;时钟置0
CLR DA8 ;数据口清零
;******************************************************************
;R取值为384
;送数据十六进制数#80C1H 对应二进制为10000000 11000001
;分2次送,先送低8位,再送高8位
UP1: MOV A,#0C1H
ACALL UP8DATA ;发送
MOV A,#80H
ACALL UP8DATA ;发送十六进制数#80C1H完毕
NOP
NOP
SETB LE8
NOP
NOP
NOP
CLR LE8
NOP
NOP
NOP
;N取值为118,A取值为48
;送数据十六进制数#3370H 对应二进制为000 00110011 01110000
;分3次送,先送低8位,再送中间8位,再送高3位
UP2: MOV A,#70H
ACALL UP8DATA ;发送
MOV A,#33H
ACALL UP8DATA ;发送
MOV A,#00H
ACALL UP3DATA ;送十六进制数#3370H完毕
NOP
NOP
SETB LE8
NOP
NOP
NOP
CLR LE8
NOP
NOP
NOP
RET
;******************************************************************
UP8DATA: MOV R3,#08H ;数据发送8次子程序
CLR C
UPDATA1: RRC A ;右移一位
MOV DA8,C
NOP
NOP
NOP
NOP
SETB CK8
NOP
NOP
NOP
NOP
CLR CK8
DJNZ R3,UPDATA1 ;8次减1循环发送,未发完转UPDATA1再发
RET ;子程序返回
UP3DATA: MOV R3,#03H ;数据发送3次子程序
CLR C
UPDATA2: RRC A ;右移一位
MOV DA8,C
NOP
NOP
NOP
NOP
SETB CK8
NOP
NOP
NOP
NOP
CLR CK8
DJNZ R3,UPDATA2 ;3次减1循环发送,未发完转UPDATA2再发
RET ;子程序返回
END ;程序结束
;;;;;;;;;;注:本程序未经本站测试,仅供参考
;;;;;;;;;软件按键去抖,LCD数据串行驱动,24c02保存关机频率
;;;;;;;;;MB1504+LCD+SST89E58RD+24C04
;;;;;;;;;Designed by FM007(zuowenping)
;;;;;;;;;Date:OCT,18th,2006
CLK164 EQU P2.0
DAT164 EQU P2.1
E EQU P2.2
R_W EQU P2.3
RS EQU P2.4
CLK EQU P2.5
DAT EQU P2.6
LE1504 EQU P2.7
SDA EQU P1.3
SCL EQU P1.2
ORG 0000H
AJMP START
ORG 0030H
START: CLR DAT
CLR LE1504
CLR CLK
CLR CLK164
CLR DAT164
MOV R1,#99H ;;;;;;;;;;;;;;;;;;;MB1504 PRE SET START
MOV R2,#01H
MOV A,R1
ACALL RS1504
MOV A,R2
ACALL RS1504
NOP
NOP
SETB LE1504
NOP
NOP
NOP
CLR LE1504
NOP
NOP
NOP ;;;;;;;;;;;;;;;;;;;MB1504 PRE SET END
MOV SP,#70H ;;;;;;;;;;;;;;;;;;;LCD PRE SET BEGAIN
ACALL INS
ACALL CLS
MOV A,#80H
ACALL WRITE_COM
MOV DPTR,#LINE1
ACALL DISPLAY
MOV A,#0C0H
ACALL WRITE_COM
MOV DPTR,#LINE2
ACALL DISPLAY ;;;;;;;;;;;;;;;;;;LCD PRE SET END
MOV 20H,#00H
MOV 21H,#04H
MOV 22H,#05H
MOV 23H,#07H
MOV DPTR,#457
ACALL READ
MOV DPL,24H
MOV DPH,25H
ACALL DIS
ACALL SETFRE ;;;;;;;;;;;;;;;;;;FRE PRE SET END
MAIN: ACALL KEY ;;;MAIN FUNCTION
AJMP MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INSTALL LCD
INS: MOV A,#38H
ACALL WRITE_COM
MOV A,#0CH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CHECK BUSY
BUSY: PUSH ACC
BUSYLOOP: CLR E
SETB R_W
CLR RS
SETB E
MOV A,P0
JB ACC.7,BUSYLOOP
POP ACC
ACALL DEL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITE COM
WRITE_COM:ACALL BUSY
CLR E
CLR RS
CLR R_W
SETB E
; MOV DB0_DB7,A
ACALL RS1602
CLR E
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITE DATA
WRITE_DATA:ACALL BUSY
CLR E
SETB RS
CLR R_W
SETB E
; MOV DB0_DB7,A
ACALL RS1602
CLR E
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DELAY
DEL: MOV R5,#5
L1: MOV R6,#248
DJNZ R6,$
DJNZ R5,L1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;164DAT SEND
RS1602: MOV R0,#08H
RSS: RLC A
MOV DAT164,C
SETB CLK164
NOP
NOP
NOP
CLR CLK164
DJNZ R0,RSS
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MB1504 3BIT SEND
SEND3BIT: MOV R0,#03H
RLC A
RLC A
RLC A
RLC A
RLC A
AJMP RCC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MB1504 8BIT SEND
RS1504: MOV R0,#08H
RCC: RLC A
MOV DAT,C
NOP
NOP
NOP
NOP
NOP
SETB CLK
CLR CLK
DJNZ R0,RCC
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DISPLAY
DISPLAY: PUSH ACC
DIS_LOOP: CLR A
MOVC A,@A+DPTR
JZ END_DIS
ACALL WRITE_DATA
INC DPTR
SJMP DIS_LOOP
END_DIS:POP ACC
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SET FREQ
SETFRE:ACALL WRITE
MOV A,DPH
ACALL SEND3BIT
MOV A,DPL
ACALL RS1504
MOV A,#00H
ACALL RS1504
NOP
NOP
SETB LE1504
NOP
NOP
NOP
CLR LE1504
NOP
NOP
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;FRE DIS
DIS: PUSH ACC
MOV 40H,DPH
MOV 50H,DPL
MOV A,#0CAH
ACALL WRITE_COM
MOV A,20H
CJNE A,#00H,FFFF
MOV A,#0AH
FFFF: MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL WRITE_DATA;;;;;;;;QIANWEI
MOV A,#0CBH
ACALL WRITE_COM
MOV A,21H
MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL WRITE_DATA;;;;;;;;;BAIWEI
MOV A,#0CCH
ACALL WRITE_COM
MOV A,22H
MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL WRITE_DATA;;;;;;;;;SHIWEI
MOV A,#0CEH
ACALL WRITE_COM
MOV A,23H
MOV DPTR,#TAB
MOVC A,@A+DPTR
ACALL WRITE_DATA;;;;;;;GEWEI
POP ACC
MOV DPH,40H
MOV DPL,50H
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ANJIAN DELAY
DELANJIAN:MOV R5,#01H
DL11: MOV R6,#051H
DL22: DJNZ R6,DL22
DJNZ R5,DL11
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEL111:
MOV R2,#04H
LMS1: MOV R0,#0A0H
LMS2: ACALL DELANJIAN
DJNZ R0,LMS2
DJNZ R2,LMS1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY: SETB P1.0
SETB P1.1
JNB P1.0,GO1
JNB P1.1,GO2
AJMP RETURN
GO1: LCALL DELANJIAN
JNB P1.0,DOWN1
AJMP RETURN
GO2: LCALL DELANJIAN
JNB P1.1,UP1
AJMP RETURN
DOWN1: ACALL DOWN
AJMP RETURN
UP1: ACALL UP
AJMP RETURN
RETURN: ACALL DEL111
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
UP: MOV A,DPL
INC A
MOV DPL,A
CJNE A,#00H,PANDUAN
INC DPH
PANDUAN: INC 23H
MOV A,23H
CJNE A,#10,RETURNUP
MOV 23H,#00H
INC 22H
MOV A,22H
CJNE A,#10,RETURNUP
MOV 22H,#00H
INC 21H
MOV A,21H
CJNE A,#10,RETURNUP
MOV 21H,#00H
INC 20H
RETURNUP: ACALL DIS
ACALL SETFRE
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
DOWN: MOV A,DPL
DEC A
MOV DPL,A
CJNE A,#0FFH,PANDUAN1
DEC DPH
PANDUAN1: DEC 23H
MOV A,23H
CJNE A,#0FFH,RETURN1
MOV 23H,#09H
DEC 22H
MOV A,22H
CJNE A,#0FFH,RETURN1
MOV 22H,#09H
DEC 21H
MOV A,21H
CJNE A,#0FFH,RETURN1
MOV 21H,#09H
DEC 20H
MOV A,20H
CJNE A,#0FFH,RETURN1
MOV 20H,#00H
RETURN1:ACALL DIS
ACALL SETFRE
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CLS清屏
CLS: MOV A,#01H
ACALL WRITE_COM
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24C04读写 STORE & READ FUNCTION(24C02/04 IIC)
WRITE:
ACALL C02START
MOV A,#0A0H
ACALL C02SEND
ACALL CACK
JB F0,WRITE
MOV A,#08H
ACALL C02SEND
ACALL CACK
JB F0,WRITE
MOV 24H,DPL
MOV 25H,DPH
MOV R0,#20H
MOV R1,#06H
GHOST: MOV A,@R0
ACALL C02SEND
ACALL CACK
JB F0,WRITE
INC R0
DJNZ R1,GHOST
ACALL C02STOP
SETB SCL
SETB SDA
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; READ
READ: ACALL C02START
MOV A,#0A0H
ACALL C02SEND
ACALL CACK
JB F0,READ
MOV A,#08H
ACALL C02SEND
ACALL CACK
JB F0,READ
ACALL C02START
MOV A,#0A0H
SETB ACC.0
ACALL C02SEND
ACALL CACK
JB F0,READ
MOV R0,#06H ;;;;;;;;;;;;; RECEIVE CONTROL
MOV R1,#20H
GO_ON: ACALL RDB
MOV @R1,A
DJNZ R0,ACK1
ACALL MNACK
ACALL C02STOP
SETB SCL
SETB SDA
RET
ACK1: ACALL MACK
JB F0,GO_ON
INC R1
AJMP GO_ON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RECEIVE BYTE
RDB: MOV R7,#8
RLP: SETB SDA
SETB SCL
MOV C,SDA
MOV A,R6
RLC A
MOV R6,A
CLR SCL
DJNZ R7,RLP
RET
C02START:SETB SDA ;;;;;;;;; 24C02 START
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
RET
C02STOP:CLR SDA ;;;;;;;;;; 24C02 STOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
RET
C02SEND:MOV R7,#08H ;;;;;;;;;;; 24C02 CONTROL BIT SEND
REGO: RLC A
JNC SHIFT
AJMP QQQQ
SHIFT: CLR SDA
AJMP SAME
QQQQ: SETB SDA
SAME: SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R7,REGO
RET
MNACK: SETB SDA ;;;;;;;;;;;;;;;;; NACK SEND
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
CLR SDA
RET
MACK: CLR SDA ;;;;;;;;;;;;;;;;;;; ACK SEND
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
SETB SDA
NOP
NOP
RET
CACK: SETB SDA ;;;;;;;;;;;;;;; ACK CHECK
SETB SCL
NOP
NOP
NOP
NOP
NOP
MOV C,SDA
MOV F0,C
CLR SCL
NOP
NOP
NOP
NOP
NOP
RET
LINE1: DB "304RADIO STATION",00H
LINE2: DB "LOCAL FRE: . M",00H
LINE3: DB " ",00H
TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,' '
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -