历史上的今天
今天是:2024年10月22日(星期二)
2019年10月22日 | PS7219的PIC单片机接口程序
2019-10-22 来源:eefocus
; Copyright (c) 1998, MICROCHIP Technology Inc
;*******************************************
TITLE "PS7219 TEST" ;标题
LIST P=16C711 ;处理器为PIC16C711单片机
#INCLUDE P16c711.INC
TIMER1 EQU H'000C' ;定义延时寄存器
TIMER2 EQU H'000D'
SENT_ADDRESS EQU H'000E' ;定义发送地址寄存器
SENT_DATA EQU H'000F' ;定义发送数据寄存器
LED1 EQU H'0010'
LED2 EQU H'0011'
LED3 EQU H'0012'
LED4 EQU H'0013'
LED5 EQU H'0014'
LED6 EQU H'0015'
LED7 EQU H'0016'
LED8 EQU H'0017'
COUNT EQU H'0018'
NO_OP EQU 0X00 ;定义控制寄存器
DIGIT1 EQU 0X01
DIGIT2 EQU 0X02
DIGIT3 EQU 0X03
DIGIT4 EQU 0X04
DIGIT5 EQU 0X05
DIGIT6 EQU 0X06
DIGIT7 EQU 0X07
DIGIT8 EQU 0X08
DECODE EQU 0X09
INTSEN EQU 0X0A
SCAN EQU 0X0B
SHUT EQU 0X0C
FLASH EQU 0X0D
DISPLAY EQU 0X0F
LOAD EQU 0 ;通讯引脚定义
DOUT EQU 1
CLK EQU 2
ORG 0
GOTO START ;程序开始
ORG H'0010'
;*************************
; 延时子程序
;*************************
T1
MOVLW 33 ;延时子程序T1
MOVWF TIMER1
DEL_LOP
CLRWDT
DECFSZ TIMER1,1
GOTO DEL_LOP
RETURN
T2
MOVLW 0X04 ;延时子程序T2
MOVWF TIMER1
MOVLW 0XFF
LOOP2
MOVWF TIMER2
LOOP1
CLRWDT
DECFSZ TIMER2,1
GOTO LOOP1
DECFSZ TIMER1,1
GOTO LOOP2
RETURN
SEND
MOVLW 8 ;数据传送子程序SEND
MOVWF COUNT
BCF PORTA,LOAD ;初始化LOAD引脚
CALL T1
SET_LP1
BCF STATUS,C ;发送8位地址
BSF PORTA,CLK
RLF SENT_ADDRESS,1
BCF PORTA,DOUT
BTFSC STATUS,C
BSF PORTA,DOUT
BCF PORTA,CLK
CALL T1 ;调用延时子程序T1
DECFSZ COUNT,1 ;COUNT减一为1零则结束传送
GOTO SET_LP1
BSF PORTA,CLK
MOVLW 8
MOVWF COUNT
BSF PORTA,LOAD
SET_LP2
BCF STATUS,C ;发送8位数据
BSF PORTA,CLK
RLF SENT_DATA,1
BCF PORTA,DOUT
BTFSC STATUS,C
BSF PORTA,DOUT
BCF PORTA,CLK
CALL T1 ;调用延时子程序T1
DECFSZ COUNT,1 ;COUNT减一为零则结束传送
GOTO SET_LP2
BSF PORTA,CLK
CALL T1
BSF PORTA,LOAD
BSF PORTA,DOUT
RETURN ;子程序返回
START
BSF STATUS,RP0 ;主程序
MOVLW 0X18
MOVWF TRISA
MOVLW 0XFF
MOVWF TRISB
BCF STATUS,RP0
CALL T1
CALL T1
MOVLW 0X12
MOVWF PORTA
BCF PORTA,LOAD
CON_COM
CALL T1 ;初始化PS7219内部RAM
MOVLW 0X0A ;设置亮度为最亮
MOVWF SENT_ADDRESS
MOVLW 0X0F
MOVWF SENT_DATA
CALL SEND ;调用串行通讯子程序
CALL T1
MOVLW 0X0B ;设置扫描界线为8位
MOVWF SENT_ADDRESS
MOVLW 0X07
MOVWF SENT_DATA
CALL SEND ;调用串行通讯子程序
CALL T1
MOVLW 0X09 ;设置每位译码方式为BCD译码
MOVWF SENT_ADDRESS
MOVLW 0XFF
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X0C ;设置工作方式为正常
MOVWF SENT_ADDRESS
MOVLW 0X01
MOVWF SENT_DATA
CALL SEND
LED_CON
CALL T1 ;LED显示控制部分
MOVLW 0X01 ;LED1显示为1
MOVWF SENT_ADDRESS
MOVLW 0X01
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X02 ;LED2显示为2
MOVWF SENT_ADDRESS
MOVLW 0X02
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X03 ;LED3显示为3
MOVWF SENT_ADDRESS
MOVLW 0X03
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X04 ;LED4显示为4
MOVWF SENT_ADDRESS
MOVLW 0X04
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X05 ;LED5显示为5
MOVWF SENT_ADDRESS
MOVLW 0X05
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X06 ;LED6显示为6
MOVWF SENT_ADDRESS
MOVLW 0X06
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X07 ;LED7显示为7
MOVWF SENT_ADDRESS
MOVLW 0X07
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X08 ;LED8显示为8
MOVWF SENT_ADDRESS
MOVLW 0X08
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X0F ;进入测试模式
MOVWF SENT_ADDRESS
MOVLW 0X01
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X0F ;退出测试模式
MOVWF SENT_ADDRESS
MOVLW 0X00
MOVWF SENT_DATA
CALL SEND
CALL T1
MOVLW 0X0D ;使能8位LED闪烁
MOVWF SENT_ADDRESS
MOVLW 0XFF
MOVWF SENT_DATA
CALL SEND
FINISH CLRWDT ;清Watch Dog
GOTO FINISH
END ;结束
史海拾趣
|
我现在正在调试的系统中用到了RTL8212,是一块千兆双口物理层收发器。现在他能够正常接收数据,但是却不能发送数据,发出的数据在接收方说是错误的数据包。我是用一块FPGA来控制的,现在不知道问题出在哪里,不知道是我的FPGA时序不对还是RTL8212的 ...… 查看全部问答> |
|
目 录 第1章 UNIX操作系统概述 6 1.1 UNIX操作系统简介 6 1.2 UNIX系统组成 6 1.3 与UNIX有关的几个名词 7 第2章 UNIX常用操作 9 2.1 启动终端 9 2.2 登录 9 2.3 UNIX命令 9 2.4 注销(退出UNIX系统) 13 第3章 UNIX文件系统 ...… 查看全部问答> |
|
arm+linux平台 通过 串口发送 数据 write完以后 必须sleep()发送才能成功 否则,发送的就在中间某位产生错误码,数据长的时候,总是在中间顿一下,然后发后半部分,前半部分的最后一个字节就错掉了 这是怎么回事? 太怪了 高手帮忙分析吧 … 查看全部问答> |
|
我用stc12c5608AD自带的AD做一个AD转换的程序 具体的代码如下 void ad_cov() { P1M0=P1M0||0x20; P1M1=P1M1||0x20; //选择P1.5为开漏。(做A/D使用时选择的模式) ADC_CONTR=0xc5; //540个时钟周期转换一次;ADC_FLAG=0;ADC_START=0(设置为1 ...… 查看全部问答> |
|
自己仿着S3C2410a的开发板,根据需要自己做了一个底板(插在上面的核心板没做),画了PCB,只用了电源,串口和液晶屏(其它的没画),做好板之后又焊上器件,当把原来的核心板(系统在flash里)插在我做的板子上时,液晶可以正常开启,但是触摸时只 ...… 查看全部问答> |




