定时数码管显示实验.ppt
定时数码管显示实验,实验目的实验器材硬件接线软件功能程序清单备注说明,实验目的:,LCD与定时中断的联合编程,显示时钟,实验器材:,1.SD-1型在线编程实验仪2.导线若干,硬件接线:,使用实验板固定接线(PTB0,1,2,3,4,5,6,7分别接LA,LB,LC,LD,LE,LF,LG,LDP PTC0,1,2,3分别接L11,L12,L13,L14),软件功能:,手动设置当前时间显示时钟,程序清单:,口地址定义寄存器地址内存变量定义主程序扫描子程序,转码子程序显示子程序延时子程序定时器1溢出中断子程序中断矢量,软件功能:,运行时请与标准时间进行校对,口地址定义,PTA EQU$0000;A口数据寄存器DDRA EQU$0004;A口数据方向寄存器PTB EQU$0001;B口数据寄存器DDRB EQU$0005;B口数据方向寄存器PTC EQU$0002;C口数据寄存器DDRC EQU$0006;C口数据方向寄存器PTD EQU$0003;D口数据寄存器DDRD EQU$0007;D口数据方向寄存器PTDPUE EQU$000F,寄存器地址,T1SC EQU$0020;定时器1状态和控制寄存器T1CNTHEQU$0021;定时器1计数寄存器(高位)T1CNTLEQU$0022;定时器1计数寄存器(低位)T1MODHEQU$0023;定时器1模数寄存器(高位)T1MODLEQU$0024;定时器1模数寄存器(低位)RAMstartAddr equ$0040;RAM的起始地址(因芯片不同可以更改)FlashStartAddr equ$8000;程序开始地址(因芯片不同可以更改),内存变量定义,ORG RAMstartAddrShow_Buffer RMB 8;存放待显示的数据Cs RMB 1;位选信号Sec RMB 1Min RMB 1Hou RMB 1I1 RMB 1,主程序,*-主程序-ORG FlashStartAddr;初始化NOP;初始化 SEI;禁止所有中断 LDHX#$023F;堆栈初始化,放入GP32的RAM最高端 TXS;系统初始化 MOV#%00000001,$001E;初始化CONFIG2,内部总线时钟用作SCI的时钟 MOV#%00111101,$001F;初始化CONFIG1,允许LVI复位信号,;禁止LIV模块的电源,LIV工作在5V,;经过32个周期退出STOP模式,禁止COP模块 CLR$0036;清零,初始化PCTL,MOV#$01,$0036 MOV#$01,$0038 MOV#$2C,$0039 MOV#$80,$003A BSET 5,$0036 BSET 7,$0037;自动方式 BSET 4,$0036;选择PLL为系统时钟源,主程序续,LDA#$FF;定义A口为输出 STA DDRA LDA#$FF;定义B口为输出 STA DDRB LDA#$FF;定义C口为输出 STA DDRC LDA#$00;定义A口之前复位PTA STA PTD;D口 STA DDRD;输入 LDA#$FF;定义D口有上拉电阻 STA PTDPUE;STA PTD;定时器1初始化 LDA#%01100110;允许溢出中断、不启动计数、分频因子=64 STA T1SC LDHX#$0000;计数寄存器初值=$0000 STHX T1CNTH LDHX#$9600;设1秒产生1次溢出中断 STHX T1MODH;模数寄存器设定值=1(2457600/64)=$9600;设置初始时间 MOV#$7F,Show_Buffer+2 MOV#$7F,Show_Buffer+5 MOV#$00,Sec,主程序续,MOV#$00,Min MOV#$00,Hou;-设置当前时间-SetUp:JSR Scan SetSec:BRSET 0,PTD,SetMin INC Sec LDA Sec CMP#!59 BNE SetMin MOV#!0,SecSetMin:BRSET 1,PTD,SetHou INC Min LDA Min CMP#!59 BNE SetHou MOV#!0,Min,主程序续,SetHou:BRSET 2,PTD,SetExit INC Hou LDA Hou CMP#!23 BNE SetExit MOV#!0,Hou SetExit:BRCLR 3,PTD,SetExit2 Mov#$FF,I1ScanDlay:JSR SCAN DBNZ I1,ScanDlay JMP SetUpSetExit2:BCLR 5,T1SC;允许定时器1计数寄存器计数 CLI,扫描子程序,Scan:LDA Hou LDHX#Show_Buffer JSR Trans1 LDA Min LDHX#Show_Buffer+3 JSR Trans1 LDA Sec LDHX#Show_Buffer+6 JSR Trans1 JSR Show_Num;显示起始数据 RTS,转码子程序,Trans1:PSHA PSHH PSHX LDHX#$000A DIV LDHX#$0000 TAX LDA Table,X PULX PULH STA,X AIX#$1 PULA,转码子程序续,PSHH PSHX LDHX#$000A DIV PSHH PULA LDHX#$0000 TAX LDA Table,X PULX PULH STA,X RTS Table FCB$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90,$40,$4F,$24,$30,$19,$12,$02,$78,$00,$10,$7f;显示码表 0 1 2 3 4 5 6 7 8 9 0.1.2.3.4.5.6.7.8.9.;0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20,显示子程序,Show_Num:PSHH;进栈,保存HX,A中内容 PSHX PSHA LDHX#$0000;清空缓冲区 MOV#$01,CS;先取第一个数Show_Num_Loop:LDA Show_Buffer,X;取出Show_Buffer中一个字符放入A STA PTB PSHX PSHH AIX#$4 LDA Show_Buffer,X;取出Show_Buffer中一个字符放入A STA PTA,显示子程序续,LDA CS;将A中第一个数存入C中输出 STA PTC LDA#!100;延时100毫秒 JSR Delay_ns ASL CS;算术左移,修改位选信号 PULH PULX AIX#!1 CPX#!4;判断扫描是否完毕 BLO Show_Num_Loop;小于4则循环;-PULA;出栈 PULX PULH RTS,延时子程序1,Delay_ms:LDA#!248;0.5ms JSR Delay_ns LDA#!248;0.5ms JSR Delay_ns AIX#-!1 CPHX#!0 BNE Delay_ms;4Cycles RTS;4Cycles,延时子程序2,Delay_ns:NOP;1Cycles NOP;1Cycles DBNZA Delay_ns;3Cycles RTS;4Cycles,定时器1溢出中断子程序,Timer1OvF:INC Sec LDA Sec CMP#!60 BLO Tim1OvF_Exit CLR Sec INC Min;一分到 LDA Min CMP#!60 BLO Tim1OvF_Exit CLR Min INC Hou;一小时到 LDA Hou CMP#!24 BLO Tim1OvF_Exit CLR Sec CLR Min CLR HouTim1OvF_Exit:LDA T1SC;清除定时器溢出标志位 BCLR 7,T1SC RTI,中断矢量,ORG$FFF2 DW Timer1OvF ORG$FFFE DW MainInit,