资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,数码管显示实验,实验目的,实验器材,硬件接线,VB,界面,软件功能,程序清单,备注说明,1,实验目的:,数码管的显示,2,实验器材:,1.,SD-1,型在线编程实验仪,2.数码管,3.导线若干,3,硬件接线:,PTB0PTB1PTB2PTB3PTB4PTB5PTB6PTB7PTC0PTC1PTC2PTC3,MC68HC908GP32,LA,LB,LC,LD,LE,LF,LG,LDP,L11,L12,L13,L14,LED,4,LED,的,VB,界面:,5,软件功能:,从,PC,机收到数字(整数或小数),使4个数字并排在一个数码管上显示,由,PC,机的,VB,界面控制显示。,6,程序清单:,程序说明,口地址定义,串行口地址定义,内存变量定义,主程序,串行口初始化,子程序,显示子程序,转码子程序,延时子程序,中断矢量,7,*-,程序说明,-,*文件名:,LED.ASM,*,使用数码管对数字(整数或小数)进行显示,*硬件连接:,PTB0,1,2,3,4,5,6,7,分别接,*,LA,LB,LC,LD,LE,LF,LG,LDP,*PTC0,1,2,3,分别接,L11,L12,L13,L14,*,功能描述:从,PC,机收到数字(整数或小数),使4个数字并排,*在一个数码管上显示,由,PC,机的,VB,界面显示控制,*目的:数码管的显示,*-,8,*-,口地址定义,-,PTB EQU$0001,;B,口数据寄存器,DDRB,EQU$0005,;B,口数据方向寄存器,PTC,EQU$0002,;C,口数据寄存器,DDRC EQU$0006,;C,口数据方向寄存器,PTD,EQU$0003,;D,口数据寄存器,DDRD,EQU$0007,;D,口数据方向寄存器,9,*-,串行口地址定义,-,SCS1 EQU$0016,;SCI,状态寄存器1,SCDR EQU$0018,;SCI,数据寄存器,SCC1 EQU$0013,;SCI,控制寄存器1,SCC2 EQU$0014,;SCI,控制寄存器2,SCBR EQU$0019,;SCI,波特率寄存器,RAMstartAddr equ,$0040,;RAM,的起始地址(因芯片不同可以更改),FlashStartAddr equ,$8000,;,程序开始地址(因芯片不同可以更改),*-,内存变量定义,-,ORG,RAMstartAddr,PC_Buffer RMB 4,;,存放从,PC,接收的数据,Show_Buffer RMB 4,;,存放待显示的数据,Cs RMB 1,;,位选信号,10,*-,主程序,-,ORG,FlashStartAddr,;,初始化,Main:,LDA#$FF,;,定义,B,口为输出,STA DDRB,LDA#$FF,;,定义,C,口为输出,STA DDRC,LDA#$FF,;,定义,D,口为输出,STA DDRD,11,*-,串行口初始化,-,LDA#%01000000,;D6(ENSCI)=1,允许,SCI,;,其它位为0,正常码输出,;8位数据,无检验,STA SCC1,LDA#%00001100,;,允许发送器,允许接收器,;不允许发送与接收中断,STA SCC2,LDA#%00000010,;,波特率为9600,STA SCBR,12,Display_Init:,;,起始数据赋值,MOV#$1,PC_Buffer,MOV#$2,PC_Buffer+$1,MOV#$3,PC_Buffer+$2,MOV#$4,PC_Buffer+$3,Start:,JSR Translate_Num,;,起始数据转码,JSR Show_Num,;,显示起始数据,BRSET 5,SCS1,Rece,_Num,;,等待接受数据,有,;就跳向,Rece,_Num,BRA Start,13,Rece,_Num:,LDHX#$0000,;,清空缓冲区,Rece,_Num1:,BRCLR 5,SCS1,*,;,等待数据,无就转向自己,;有就往下执行,LDA SCDR,;,取数据寄存器中内容放入,A,STA PC_Buffer,X,;,将,PC_Buffer,中的数据,;依次存入,A,INCX,CPX#!4,;,接收满4个数就开始显示,BLO,Rece,_Num1,BRA Start,14,*-,显示子程序,(,Show_Num),-,*,入口:以,Show_Buffer,首地址的内存区,共4个字节,*出口:无,*占用寄存器:,HX,A,*,占用内存:,CS,*,调用子程序:,Delay_ns,*,描述:显示,Show_Buffer,中的四个字符,*-,Show_Num:,PSHH,;,进栈,保存,HX,A,中内容,PSHX,PSHA,LDHX#$00,;,清空缓冲区,LDA#$01,;,先取第一位,STA CS,15,Show_Num_Loop:,LDA Show_Buffer,X,;,取出,Show_Buffer,中,;第一个字符放入,A,STA PTB,;,再将,A,中内容存入,B,输出,LDA CS,STA PTC,;,将,A,中内容存入,C,中输出,LDA#!100,;,延时100毫秒,JSR Delay_ns,ASL CS,;,算术左移,修改位选信号,INCX,CPX#!4,;,判断是否已经扫描完毕,BLO Show_Num_LOOP,;,小于则循环,16,PULA,;,出栈,PULX,PULH,RTS,*-,转码子程序(,Translate_Num),-,*,子程序名,:,Translate_Num,*,入口:以,PC_Buffer,为首地址的内存区四个字节,*出口:以,Show_,Buffe,为首地址的内存区四个字节,*占用寄存器:,HX,A,*,占用内存:,Show_Buffer,*,调用子程序:无,*描述:将,PC_Buffer,中字符转换为相应的字型码,*放入,Show_Buffer,中,*-,17,Translate_Num:,PSHH,;,进栈,保存,HX,A,中内容,PSHX,PSHA,LDHX#$0000,;,清空缓冲区,Translate_Num1:,LDA PC_Buffer,X,;,取,PC_Buffer,中一个数,;放入,A,PSHH,;,进栈,保存,HX,内容,PSHX,18,TAX,;,将,A,中内容放入,X,中,LDA Table,X,;,取出对应的字形码,PULX,PULH,STA Show_Buffer,X,;,将,Show_Buffer,中字符,;依次放入,A,中,INCX,CPX#$4,BLO Translate_Num1,;,小于四个字符则循环,19,PULA,;,出栈,PULX,PULH,RTS,Table FCB$C0,$CF,$A4,$B0,$99,$92,$82,$F8,$80,$90,;,显示码表 0 1 2 3 4 5 6 7 8 9,;0 1 2 3 4 5 6 7 8 9,FCB$40,$4F,$24,$30,$19,$12,$02,$78,$00,$10,;,显示码表 0.1.2.3.4.5.6.7.8.9.,;10 11 12 13 14 15 16 17 18 19,20,*-,延时子程序(,Delay_ms),-,*,入口:,HX(,表示要延时的毫秒数),HX=1,延时1毫秒,*占用内部寄存器:,A,*,占用内存:无,*-,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,21,*-,延时子程序(,Delay_ns),-,*,入口:,A,*,占用内部寄存器:无,*占用内存:无,*使用方法:设延时10,s,A=(T-4)/2=3,*LDA#!3 ;,延时10,s,*BSR Delay_,nus,*-,Delay_ns:,NOP,;1Cycles,NOP,;1Cycles,DBNZA Delay_ns,;3Cycles,RTS,;4Cycles,22,*,*-,中断矢量,-,ORG$FFFE,DW MAIN,23,
展开阅读全文