📄 zi2188.asm
字号:
;;;;;;;;;;;;;;;;;;;;ZI2188单芯片2.4G无线模组控制程序;;;;;; ;;;;;;;;;;;;;
;;用51单片机的P2口其中三个引脚,来做SPI总线,与ZI2188通信;;;;;;;;;;;;;;;
;;;SPI发送数据方式:先发数据高位,再发低位,从高到低;;;;;;;;;;;;;;;;;;;;
;;设计思路:做键盘扫描,用以控制ZI2188的工作频道;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;1单片机对ZI2188的寄存器进行初始化;;;;;;;;;;;;;;;;;;;;;;;;;;
;;51单片机晶振11.0592MHZ,ZI2188的晶振14.318MHZ;;;;;;;;;;;;;;;;;;;;;;;;;;
;;设计人:谢成林;;;;;;;;;;;;;;;;时间:2009年2月22日;;;;;;;;;;;;;;;;;;;;;
;;公司:深圳博锐科技;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;ZI2188寄存器初始化值;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;REG0(CH1)2414: 000 1011110 11101001000
;REG0(CH2)2432: 000 1110100 10011001000
;REG0(CH3)2450: 000 0100110 01011001000
;REG0(CH4)2468:
;REG1;;;;;;;;;; 001 0001001 00000001110
;REG2:;;;;;;;;; 010 0101010 10000100110
;REG3;;;;;;;;;; 011 0001010 01000110110
;REG4;;;;;;;;;; 100 0000001 00011100100
;REG5;;;;;;;;;; 101 0000011 11000000000
;REG6:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include<at89s53.inc> ;调用库,里面有单片机引脚的定义
;;;;;;;;;;;;;;;;;;;以下为单片机的端口定义;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SCLK BIT P2^2 ;把单片机的P2口第4脚,命名为SCLK 时钟
SDAIN BIT P2^1 ;把单片机的P2口第5脚,命名为SDAIN 数据
EN BIT P2^0 ;把单片机的P2口第6脚,命名为EN 使能
KEY1 BIT P3^5 ;把单片机的P3口第5脚,命名为KEY1 按键
KEY2 BIT P3^4 ;把单片机的P3口第4脚,命名为KEY2 按键
KEY3 BIT P3^3 ;把单片机的P3口第3脚,命名为KEY3 按键
KEY4 BIT P3^2 ;把单片机的P3口第2脚,命名为KEY4 按键
;;;;;;;;;;;;;;;;;;;以上为单片机的端口定义;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;以下为主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:
ORG 0000H ;程序从地址00H单元开始执行
MOV P2,#0FFH ;把P2口置1
MOV P3,#0FFH ;把P3口置1
MOV P0,#0FFH ;把P0口置1
KEY_SCAN: ;键盘扫描程序
JNB KEY1, FRE1 ;如果KEY1有按下, 则转到标号FRE1处执行
JNB KEY2, FRE2 ;如果KEY有按下, 则转到标号FRE2处执行
JNB KEY3, FRE3 ;如果KEY3有按下, 则转到标号FRE3处执行
JNB KEY4, FRE4 ;如果KEY4有按下, 则转到标号FRE4处执行
LJMP KEY_SCAN ;如果KEY没有按下, 则转到标号KEY_SCAN处执行,进行键盘扫描
;;;;;;;;;;;;;;;;;;;以上为主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FRE1: LJMP CH1 ;跳转到CH1 2414处
FRE2: LJMP CH2 ;跳转到CH2 2432处
FRE3: LJMP CH3 ;跳转到CH3 2450处
FRE4: LJMP CH4 ;跳转到CH4 2468处
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;以下为CH1初始化ZI2188Z程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZI2188 REG1寄存器初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CH1: ;初始化ZI2188,先发数据高位,再发低位,从高往低发
REG0A: ;初始化ZI2188寄存器REG0 。(从低位到高位,前3位是地址,后面是数据共21位)
CLR SCLK ;把CLK置低
CLR EN ;EN置低
MOV DPTR,#TAB0A ;表首地址送DPTR
STAR0A: MOV R0,#0 ;把数据0放入R0,给一个偏移量的初值
UP0A: MOV A,R0 ;再把R0中的数送给A
MOVC A,@A+DPTR ;从表中把要处理的数据找出来
CJNE A,#0DH,EXIT0A ;是否为结束符号0DH,如果是,则往下执行,如果不是,则跳到EXIT
SETB EN ;置高EN使能
LJMP REG1A ;程序跳转到REG1处执行
EXIT0A: MOV R7,#7 ;移位次数7次
LOOP0A: RLC A ;左移A中数
MOV SDAIN,C ;把C中的数送入DAT
NOP ;空操作
NOP ;空操作,延时
SETB SCLK ;把CLK置高,使数据DAT写入移位寄存器
NOP ;空操作,延时
NOP ;空操作,延时
CLR SCLK ;把CLK置低
DJNZ R7,LOOP0A ;R7不为0,转LOOP执行
INC R0 ;R0加1
SJMP UP0A ;转到UP处执行
TAB0A: DB 26H,88H,02H,0DH ;数据列表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZI2188 REG2寄存器初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REG1A: ;初始化ZI2188寄存器REG1。(从低位到高位,前3位是地址,后面是数据,共21位)
CLR SCLK ;把CLK置低
CLR EN ;EN置低
MOV DPTR,#TAB1A ;表首地址送DPTR
STAR1A: MOV R0,#0 ;把数据0放入R0,给一个偏移量的初值
UP1A: MOV A,R0 ;再把R0中的数送给A
MOVC A,@A+DPTR ;从表中把要处理的数据找出来
CJNE A,#0DH,EXIT1A ;是否为结束符号0DH,如果是,则往下执行,如果不是,则跳到EXIT1
SETB EN ;置高EN使能
LJMP REG2A ;程序跳转到REG2处执行
EXIT1A: MOV R7,#7 ;移位次数7次
LOOP1A: RLC A ;左移A中数
MOV SDAIN,C ;把C中的数送入DAT
NOP ;空操作
NOP ;空操作,延时
SETB SCLK ;把CLK置高,使数据DAT写入移位寄存器
NOP ;空操作
NOP ;空操作,延时
CLR SCLK ;把CLK置低
DJNZ R7,LOOP1A ;R7不为0,转LOOP1执行
INC R0 ;R0加1
SJMP UP1A ;转到UP1
TAB1A: DB 64H,14H,0A4H,0DH ;数据列表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZI2188 REG4寄存器初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REG2A: ;初始化ZI2188寄存器REG2。(从低位到高位,前3位是地址,后面是数据共21位)
CLR SCLK ;把CLK置低
CLR EN ;EN置低
MOV DPTR,#TAB2A ;表首地址送DPTR
STAR2A:MOV R0,#0 ;把数据0放入R0,给一个偏移量的初值
UP2A: MOV A,R0 ;再把R0中的数送给A
MOVC A,@A+DPTR ;从表中把要处理的数据找出来
CJNE A,#0DH,EXIT2A ;是否为结束符号0DH,如果是,则往下执行,如果不是,则跳到EXIT2
SETB EN ;置高EN使能
LJMP REG4A ;程序跳转到REG4处执行
EXIT2A:MOV R7,#7 ;移位次数7次
LOOP2A:RLC A ;左移A中数
MOV SDAIN,C ;把C中的数送入DAT
NOP ;空操作
NOP ;空操作,延时
SETB SCLK ;把CLK置高,使数据DAT写入移位寄存器
NOP ;空操作
NOP ;空操作,延时
CLR SCLK ;把CLK置低
DJNZ R7,LOOP2A ;R7不为0,转LOOP2执行
INC R0 ;R0加1
SJMP UP2A ;转到UP2
TAB2A: DB 70H,08H,88H,0DH ;数据列表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;REG3: ;初始化ZI2188寄存器REG3。(从低位到高位,前3位是地址,后面是数据共21位)
;预留
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZI2188 REG5寄存器初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REG4A: ;初始化ZI2188寄存器REG4。(从低位到高位,前3位是地址,后面是数据共21位)
CLR SCLK ;把CLK置低
CLR EN ;EN置低
MOV DPTR,#TAB4A ;表首地址送DPTR
STAR4A:MOV R0,#0 ;把数据0放入R0,给一个偏移量的初值
UP4A: MOV A,R0 ;再把R0中的数送给A
MOVC A,@A+DPTR ;从表中把要处理的数据找出来
CJNE A,#0DH,EXIT4A ;是否为结束符号0DH,如果是,则往下执行,如果不是,则跳到EXIT4
SETB EN ;置高EN使能
LJMP REG5A ;程序跳转到REG5处执行
EXIT4A:MOV R7,#7 ;移位次数7次
LOOP4A:RLC A ;左移A中数
MOV SDAIN,C ;把C中的数送入DAT
NOP ;空操作
NOP ;空操作,延时
SETB SCLK ;把CLK置高,使数据DAT写入移位寄存器
NOP ;空操作
NOP ;空操作,延时
CLR SCLK ;把CLK置低
DJNZ R7,LOOP4A ;R7不为0,转LOOP4执行
INC R0 ;R0加1
SJMP UP4A ;转到UP4
TAB4A: DB 00H,3CH,0AH,0DH ;数据列表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZI2188 REG6寄存器初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REG5A: ;初始化ZI2188寄存器REG5。(从低位到高位,前3位是地址,后面是数据共21位)
CLR SCLK ;把CLK置低
CLR EN ;EN置低
MOV DPTR,#TAB5A ;表首地址送DPTR
STAR5A:MOV R0,#0 ;把数据0放入R0,给一个偏移量的初值
UP5A: MOV A,R0 ;再把R0中的数送给A
MOVC A,@A+DPTR ;从表中把要处理的数据找出来
CJNE A,#0DH,EXIT5A ;是否为结束符号0DH,如果是,则往下执行,如果不是,则跳到EXIT5
SETB EN ;EN置高
LJMP REG6A ;程序跳转到REG6处执行
EXIT5A:MOV R7,#7 ;移位次数7次
LOOP5A:RLC A ;左移A中数
MOV SDAIN,C ;把C中的数送入DAT
NOP ;空操作
NOP ;空操作,延时
SETB SCLK ;把CLK置高,使数据DAT写入移位寄存器
NOP ;空操作,延时
NOP ;空操作,延时
CLR SCLK ;把CLK置低
DJNZ R7,LOOP5A ;R7不为0,转LOOP5执行
INC R0 ;R0加1
SJMP UP5A ;转到UP5
TAB5A: DB 6CH,24H,8CH,0DH ;数据列表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZI2188 REG0寄存器初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REG6A: ;初始化ZI2188寄存器REG5。(从低位到高位,前3位是地址,后面是数据共21位)
CLR SCLK ;把CLK置低
CLR EN ;EN置低
MOV DPTR,#TAB6A ;表首地址送DPTR
STAR6A:MOV R0,#0 ;把数据0放入R0,给一个偏移量的初值
UP6A: MOV A,R0 ;再把R0中的数送给A
MOVC A,@A+DPTR ;从表中把要处理的数据找出来
CJNE A,#0DH,EXIT6A ;是否为结束符号0DH,如果是,则往下执行,如果不是,则跳到EXIT6
SETB EN ;EN置高
MOV P0,#00111111B ;频道指示灯
LJMP KEY_SCAN ;程序跳转到KEY_SCAN处执行,初始化完后,进行键盘扫描
EXIT6A:MOV R7,#7 ;移位次数7次
LOOP6A:RLC A ;左移A中数
MOV SDAIN,C ;把C中的数送入DAT
NOP ;空操作
NOP ;空操作,延时
SETB SCLK ;把CLK置高,使数据DAT写入移位寄存器
NOP ;空操作
NOP ;空操作,延时
CLR SCLK ;把CLK置低
DJNZ R7,LOOP6A ;R7不为0,转LOOP6执行
INC R0 ;R0加1
SJMP UP6A ;转到UP6
TAB6A: DB 12H,76H,0D0H,0DH ;数据列表
;;;;;;;;;;;;;;;;;;;以上为CH1初始化ZI2188Z程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;以下为CH2初始化ZI2188Z程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZI2188 REG1寄存器初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CH2: ;初始化ZI2188,先发数据高位,再发低位,从高往低发
REG0B: ;初始化ZI2188寄存器REG0 。(从低位到高位,前3位是地址,后面是数据共21位)
CLR SCLK ;把CLK置低
CLR EN ;EN置低
MOV DPTR,#TAB0B ;表首地址送DPTR
STAR0B:MOV R0,#0 ;把数据0放入R0,给一个偏移量的初值
UP0B: MOV A,R0 ;再把R0中的数送给A
MOVC A,@A+DPTR ;从表中把要处理的数据找出来
CJNE A,#0DH,EXIT0B ;是否为结束符号0DH,如果是,则往下执行,如果不是,则跳到EXIT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -