⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zi2188.asm

📁 中兴高频头ZI2188源程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;;;;;;;;;;;;;;;;;;;;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 + -