专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC16F887数码管显示10 37 81怎么编写程序 小白求教
2019-03-25 19:07
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
PIC单片机
9060
3
1646
最好有详细程序参考下 现在就显示3个比较少 我想知道多了的话怎么办 显示的数字没有规律排列的 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
dingzy_2002
2019-03-26 05:31
这是DS1302读写子程序:
;*************************************
; DS1302读写与设置子程序
;*************************************
;说明:
;用于对MAXIN(DALLAS)的DS1302进行读写与相关设置
;DS1302写指令格式:(低位在前方式收发数据)
;-----------------------------------------------------------
;| BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
;| 1 | RAM/CK | A4 | A3 | A2 | A1 | A0 | R/W |
;-----------------------------------------------------------
;第6位为L时,读写时钟;为H时,读写内部RAM
;第0位为L时,写DS1302;为H时,读DS1302
;#DEFINE DS1302_RAM_R 0xC1
;#DEFINE DS1302_RAM_W 0xC0
;#DEFINE DS1302_RTC_R 0x81
;#DEFINE DS1302_RTC_W 0X80
;相关读写RTC数据指令(单字节模式下):
;#DEFINE DS1302_SEC_W 0X80
;#DEFINE DS1302_SEC_R 0x81;秒读写
; BIT7=振荡时钟使能(0),BIT6~4=十位秒数据,BIT3~0=个位秒数据
;#DEFINE DS1302_MIN_W 0X82
;#DEFINE DS1302_MIN_R 0X83;分读写
; BIT7=未用,BIT6~4=十位分钟数据,BIT3~0=个位分钟数据
;#DEFINE DS1302_HOUR_W 0X84
;#DEFINE DS1302_HOUR_R 0X85;时读写
; BIT7=12/24制指示,12H=1,24H=0;
; BIT6:未用,读为0
; BIT5:24小时制为小时的十位数据;12小时制为上午(0)/下午(1)指示
; BIT4:小时数据的十位
; BIT3~0:个位小时数据.
;#DEFINE DS1302_DATE_W 0X86
;#DEFINE DS1302_DATE_R 0X87;日读写
; BIT7~6:未用,读为0
; BIT5~4:十位日期
; BIT3~0:个位日期
;#DEFINE DS1302_MONTH_W 0X88
;#DEFINE DS1302_MONTH_R 0X89;月读写
; BIT7~5:未用,读为0
; BIT4:十位月份
; BIT3~0:个位月份
;#DEFINE DS1302_DAY_W 0X8A
;#DEFINE DS1302_DAY_R 0X8B;周读写
; BIT7~3:未用,读为0
; BIT2~0:星期数据
;#DEFINE DS1302_YEAR_W 0X8C
;#DEFINE DS1302_YEAR_R 0X8D;年读写
; BIT7~4:十位年数据(固定为20)
; BIT3~0:个位年
;#DEFINE DS1302_SET1_W 0X8E
;#DEFINE DS1302_SET1_R 0X8F;配置1读写
; BIT7: 写保护,H为禁止写保护
; BIT6~0:未用,读为0
;#DEFINE DS1302_SET2_W 0X90
;#DEFINE DS1302_SET2_R 0X91;配置2读写
; BIT7~4:涓流充电使能=1010,其它数据不使能
; BIT3~2:充电二极管选择:01=1个二极管,10=2个二极管串联
; BIT1~0:充电电阻选择:00=0Ω,01=2KΩ,10=4KΩ,11=8KΩ
;------------------------------------------------
;需设置的管脚:
; #DEFINE RTC_CS PORTC,0;DS1302片选,H=选通
; #DEFINE RTC_DA PORTC,1;DS1302数据,I/O
; #DEFINE RTC_CK PORTC,2;DS1302时钟
;需使用的寄存器:
; RTC_SECOND EQU 50H ;秒数据
; #DEFINE RTC_MINUTES RTC_SECOND+1;分钟数据
; #DEFINE RTC_HOUR RTC_SECOND+2;小时数据
; #DEFINE RTC_DATE RTC_SECOND+3;日期数据
; #DEFINE RTC_MONTH RTC_SECOND+4;月份数据
; #DEFINE RTC_DAY RTC_SECOND+5;日期数据
; #DEFINE RTC_YEAR RTC_SECOND+6;年数据
; #DEFINE RTC_SET1 RTC_SECOND+7
; #DEFINE RTC_SET2 RTC_SECOND+8;涓流充电控制
;涉及到的工作寄存器:
; W:中间寄存器
; R0:命令传输寄存器
; R1:数据传输寄存器
; R7:读取字节数寄存器
; R6:位发送控制寄存器
; FSR:INDF:间接寄存器
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; 子程序开始
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;*************************************
;DS1302读出时钟数据程序:
;*************************************
DS1302_DATA_READ:
MOVLW .7
MOVWF R7
MOVLW DS1302_SEC_R
MOVWF R2
MOVLW RTC_SECOND
MOVWF FSR
MOVFW R2
CALL DS1302_RTC_READ
MOVWF INDF
INCF FSR
INCF R2
INCF R2
DECFSZ R7
GOTO $-7
RETURN
;*************************************
;DS1302初始化程序:
;*************************************
DS1302_INIT:
CALL DS1302_DATA_READ
;写保护关闭
DS1302_WP_DISABLE:
CLRF R1
MOVLW DS1302_SET1_W
CALL DS1302_RTC_WRITE
DS1302_CHARGE:
;设置涓流充电参数:
MOVLW B'00001011';B'10101011';(涓流充电允许=1010,2个二极管=10,充电限流电阻8KΩ=11)
MOVWF R1
MOVLW DS1302_SET2_W
CALL DS1302_RTC_WRITE
DS1302_HOUR_SYS:
;设置时间制:若是12小时制,则改为24小时制
BTFSS RTC_HOUR,7
GOTO $+.6
BCF RTC_HOUR,7
MOVFW RTC_HOUR
MOVWF R1
MOVLW DS1302_HOUR_W
CALL DS1302_RTC_WRITE
;检查时钟振荡,停振则开启:
DS1302_OSO_SET:
BTFSS RTC_SECOND,7
GOTO $+.5
CLRF RTC_SECOND
CLRF R1
MOVLW DS1302_SEC_W
CALL DS1302_RTC_WRITE
;写保护打开:
DS1302_WP_ENABLE:
MOVLW 80H
MOVWF R1
MOVLW DS1302_SET1_W
CALL DS1302_RTC_WRITE
RETURN
;*************************************
;DS1302读数据子程序:
;*************************************
;W:给定的指令(含地址)
;R1:读出的数据
DS1302_RTC_READ:
BCF RTC_CK
BSF RTC_CS
CALL DS1302_OUT
CALL DS1302_IN
BCF RTC_CS
RETURN
;*************************************
;DS1302写数据子程序:
;*************************************
DS1302_RTC_WRITE:
;W:给定的指令(含地址)
;R1:需写入的数据
BCF RTC_CK
BSF RTC_CS
CALL DS1302_OUT
MOVFW R1
CALL DS1302_OUT
BCF RTC_CS
RETURN
;-------------------------------------
;DS1302字节数据发送子程序:
;-------------------------------------
DS1302_OUT:
MOVWF R0
MOVLW .8
MOVWF R6
BSF STATUS,RP0
BCF TRISA,0;RTC_DA
CLRF STATUS
DS1302_OUT1:
BCF RTC_CK
BTFSS R0,0
BCF RTC_DA
BTFSC R0,0
BSF RTC_DA
GOTO $+1
GOTO $+1
RRF R0
BSF RTC_CK
DECFSZ R6
GOTO DS1302_OUT1
BSF STATUS,RP0
BSF TRISA,0;RTC_DA
CLRF STATUS
BCF RTC_CK
RETURN
;-------------------------------------
;DS1302字节数据接收子程序:
;-------------------------------------
DS1302_IN:
MOVLW .8
MOVWF R6
DS1302_IN1:
BTFSS RTC_DA
BCF STATUS,C
BTFSC RTC_DA
BSF STATUS,C
RRF R0
BSF RTC_CK
GOTO $+1
GOTO $+1
BCF RTC_CK
DECFSZ R6
GOTO DS1302_IN1
MOVFW R0
RETURN
加载中...
查看其它3个回答
一周热门
更多
>
相关问题
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
单片机程序必知的几个寄存器
0个评论
单片机 矩阵式按键
0个评论
51单片机上移植C语言的printf()
0个评论
STC89C52MCU--软件实现系统复位
0个评论
单片机C语言程序该这样写!不是教科书上教的那样!转[]
0个评论
单片机并行I/O口(P0)硬件结构
0个评论
壹:单片机的内部资源
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
;*************************************
; DS1302读写与设置子程序
;*************************************
;说明:
;用于对MAXIN(DALLAS)的DS1302进行读写与相关设置
;DS1302写指令格式:(低位在前方式收发数据)
;-----------------------------------------------------------
;| BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
;| 1 | RAM/CK | A4 | A3 | A2 | A1 | A0 | R/W |
;-----------------------------------------------------------
;第6位为L时,读写时钟;为H时,读写内部RAM
;第0位为L时,写DS1302;为H时,读DS1302
;#DEFINE DS1302_RAM_R 0xC1
;#DEFINE DS1302_RAM_W 0xC0
;#DEFINE DS1302_RTC_R 0x81
;#DEFINE DS1302_RTC_W 0X80
;相关读写RTC数据指令(单字节模式下):
;#DEFINE DS1302_SEC_W 0X80
;#DEFINE DS1302_SEC_R 0x81;秒读写
; BIT7=振荡时钟使能(0),BIT6~4=十位秒数据,BIT3~0=个位秒数据
;#DEFINE DS1302_MIN_W 0X82
;#DEFINE DS1302_MIN_R 0X83;分读写
; BIT7=未用,BIT6~4=十位分钟数据,BIT3~0=个位分钟数据
;#DEFINE DS1302_HOUR_W 0X84
;#DEFINE DS1302_HOUR_R 0X85;时读写
; BIT7=12/24制指示,12H=1,24H=0;
; BIT6:未用,读为0
; BIT5:24小时制为小时的十位数据;12小时制为上午(0)/下午(1)指示
; BIT4:小时数据的十位
; BIT3~0:个位小时数据.
;#DEFINE DS1302_DATE_W 0X86
;#DEFINE DS1302_DATE_R 0X87;日读写
; BIT7~6:未用,读为0
; BIT5~4:十位日期
; BIT3~0:个位日期
;#DEFINE DS1302_MONTH_W 0X88
;#DEFINE DS1302_MONTH_R 0X89;月读写
; BIT7~5:未用,读为0
; BIT4:十位月份
; BIT3~0:个位月份
;#DEFINE DS1302_DAY_W 0X8A
;#DEFINE DS1302_DAY_R 0X8B;周读写
; BIT7~3:未用,读为0
; BIT2~0:星期数据
;#DEFINE DS1302_YEAR_W 0X8C
;#DEFINE DS1302_YEAR_R 0X8D;年读写
; BIT7~4:十位年数据(固定为20)
; BIT3~0:个位年
;#DEFINE DS1302_SET1_W 0X8E
;#DEFINE DS1302_SET1_R 0X8F;配置1读写
; BIT7: 写保护,H为禁止写保护
; BIT6~0:未用,读为0
;#DEFINE DS1302_SET2_W 0X90
;#DEFINE DS1302_SET2_R 0X91;配置2读写
; BIT7~4:涓流充电使能=1010,其它数据不使能
; BIT3~2:充电二极管选择:01=1个二极管,10=2个二极管串联
; BIT1~0:充电电阻选择:00=0Ω,01=2KΩ,10=4KΩ,11=8KΩ
;------------------------------------------------
;需设置的管脚:
; #DEFINE RTC_CS PORTC,0;DS1302片选,H=选通
; #DEFINE RTC_DA PORTC,1;DS1302数据,I/O
; #DEFINE RTC_CK PORTC,2;DS1302时钟
;需使用的寄存器:
; RTC_SECOND EQU 50H ;秒数据
; #DEFINE RTC_MINUTES RTC_SECOND+1;分钟数据
; #DEFINE RTC_HOUR RTC_SECOND+2;小时数据
; #DEFINE RTC_DATE RTC_SECOND+3;日期数据
; #DEFINE RTC_MONTH RTC_SECOND+4;月份数据
; #DEFINE RTC_DAY RTC_SECOND+5;日期数据
; #DEFINE RTC_YEAR RTC_SECOND+6;年数据
; #DEFINE RTC_SET1 RTC_SECOND+7
; #DEFINE RTC_SET2 RTC_SECOND+8;涓流充电控制
;涉及到的工作寄存器:
; W:中间寄存器
; R0:命令传输寄存器
; R1:数据传输寄存器
; R7:读取字节数寄存器
; R6:位发送控制寄存器
; FSR:INDF:间接寄存器
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; 子程序开始
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;*************************************
;DS1302读出时钟数据程序:
;*************************************
DS1302_DATA_READ:
MOVLW .7
MOVWF R7
MOVLW DS1302_SEC_R
MOVWF R2
MOVLW RTC_SECOND
MOVWF FSR
MOVFW R2
CALL DS1302_RTC_READ
MOVWF INDF
INCF FSR
INCF R2
INCF R2
DECFSZ R7
GOTO $-7
RETURN
;*************************************
;DS1302初始化程序:
;*************************************
DS1302_INIT:
CALL DS1302_DATA_READ
;写保护关闭
DS1302_WP_DISABLE:
CLRF R1
MOVLW DS1302_SET1_W
CALL DS1302_RTC_WRITE
DS1302_CHARGE:
;设置涓流充电参数:
MOVLW B'00001011';B'10101011';(涓流充电允许=1010,2个二极管=10,充电限流电阻8KΩ=11)
MOVWF R1
MOVLW DS1302_SET2_W
CALL DS1302_RTC_WRITE
DS1302_HOUR_SYS:
;设置时间制:若是12小时制,则改为24小时制
BTFSS RTC_HOUR,7
GOTO $+.6
BCF RTC_HOUR,7
MOVFW RTC_HOUR
MOVWF R1
MOVLW DS1302_HOUR_W
CALL DS1302_RTC_WRITE
;检查时钟振荡,停振则开启:
DS1302_OSO_SET:
BTFSS RTC_SECOND,7
GOTO $+.5
CLRF RTC_SECOND
CLRF R1
MOVLW DS1302_SEC_W
CALL DS1302_RTC_WRITE
;写保护打开:
DS1302_WP_ENABLE:
MOVLW 80H
MOVWF R1
MOVLW DS1302_SET1_W
CALL DS1302_RTC_WRITE
RETURN
;*************************************
;DS1302读数据子程序:
;*************************************
;W:给定的指令(含地址)
;R1:读出的数据
DS1302_RTC_READ:
BCF RTC_CK
BSF RTC_CS
CALL DS1302_OUT
CALL DS1302_IN
BCF RTC_CS
RETURN
;*************************************
;DS1302写数据子程序:
;*************************************
DS1302_RTC_WRITE:
;W:给定的指令(含地址)
;R1:需写入的数据
BCF RTC_CK
BSF RTC_CS
CALL DS1302_OUT
MOVFW R1
CALL DS1302_OUT
BCF RTC_CS
RETURN
;-------------------------------------
;DS1302字节数据发送子程序:
;-------------------------------------
DS1302_OUT:
MOVWF R0
MOVLW .8
MOVWF R6
BSF STATUS,RP0
BCF TRISA,0;RTC_DA
CLRF STATUS
DS1302_OUT1:
BCF RTC_CK
BTFSS R0,0
BCF RTC_DA
BTFSC R0,0
BSF RTC_DA
GOTO $+1
GOTO $+1
RRF R0
BSF RTC_CK
DECFSZ R6
GOTO DS1302_OUT1
BSF STATUS,RP0
BSF TRISA,0;RTC_DA
CLRF STATUS
BCF RTC_CK
RETURN
;-------------------------------------
;DS1302字节数据接收子程序:
;-------------------------------------
DS1302_IN:
MOVLW .8
MOVWF R6
DS1302_IN1:
BTFSS RTC_DA
BCF STATUS,C
BTFSC RTC_DA
BSF STATUS,C
RRF R0
BSF RTC_CK
GOTO $+1
GOTO $+1
BCF RTC_CK
DECFSZ R6
GOTO DS1302_IN1
MOVFW R0
RETURN
一周热门 更多>