版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及其嵌入式应用实验单片机原理及其嵌入式应用实验单片机原理及其嵌入式应用实验单片机原理及其嵌入式应用
实验基本实验综合实例<<<2基本实验程序框架开关量输入输出(IO)实验串行通信及AD转换实验键盘编程实验液晶显示实验数码管显示实验FLASH编程实验定时器溢出中断实验定时器输入中断捕捉实验<<<3单片机原理及其嵌入式应用
实验基本实验综合实例<<<2基本实验程序框架开关量输入输出(IO)实验串行通信及AD转换实验键盘编程实验液晶显示实验数码管显示实验FLASH编程实验定时器溢出中断实验定时器输入中断捕捉实验<<<3程序框架实验目的实验器材硬件接线软件功能程序清单备注说明<<<4实验目的:了解程序基本框架5实验器材:1.SD-1型在线编程实验仪2.导线若干6硬件接线:VCCPTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCU
PTC4PTB7PTB6PTB5PTB4PTB3PTB2PTB1PTB07软件功能:PTA口的模拟量输出,控制指示灯程序执行指示灯闪烁8程序清单:文件说明口地址定义数据区定义主程序系统初始化及中断矢量延时子程序9*---------文件说明------------------------------------*文件名:PrgFrame.ASM*硬件连接:PTA.1接指示灯*程序描述:指示灯PTA.1闪烁*目的:第一个MotorolaMCU程序框架*说明:提供MotorolaMCU的编程框架,供教学入门使用*-----------------------------------------------------10*----口地址定义----------------------------PTAEQU$0000;A口数据寄存器DDRAEQU$0004;A口数据方向寄存器11RAMstartAddrequ$0040;RAM的起始地址(因芯片不同可以更改)FlashStartAddrequ$8000;程序开始地址(因芯片不同可以更改)*数据区定义(变量名定义)——————————————————
orgRAMstartAddr;RAM的起始地址N1rmb1;变量N1,缓冲使用12*主程序——————————————————————————————
orgFlashStartAddr;程序起始地址MainInit:;复位后程序从此开始执行;系统初始化
SEI;禁止所有中断
LDHX#$023F;堆栈初始化,放入GP32的RAM最高端
TXSJSRInit0;调系统初始化子程序Init0,初始学习时跳过此处;I/O初始化
BSET1,DDRA;设置PTA.1为输出
BSET1,PTA;初始时,PTA.1指示灯"暗"MainLoop:;程序总循环入口
BCLR1,PTA;PTA.1指示灯“亮”
MOV#$2,N1;延时子程序DelaySub的时间长度入口
JSRDelaySub;调用延时子程序
BSET1,PTA;初始时,PTA.1指示灯"暗"
MOV#$4,N1;延时子程序DelaySub的时间长度入口
JSRDelaySub;调用延时子程序;-------------------------------------------------------
JMPMainLoop;转总循环入口处 13Init0:;系统初始化Init0子程序
LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003ABSET5,$0036BSET7,$0037BSET4,$0036RTS*----中断矢量---------------------------------
ORG$FFFE;复位矢量
DWMainInit14延时子程序DelaySub:;延时0.1秒
PSHH;保据寄存器HXPSHXDelaySub1:LDHX#$FFFFDelaySub2:PSHA;保护寄存器ALDA#$FFDelaySub3:DBNZADelaySub3PULADBNZXDelaySub2DBNZADelaySub1PULXPULHRTS15开关量输入输出(IO)实验实验目的实验器材硬件接线程序功能程序清单备注说明<<<16实验目的:掌握I/O口的基本使用方法17实验器材:1.SD-1型在线编程实验仪2.导线若干18vccvccPTC0PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0vccPTB1PTC1PTB0MOTOROLAGP32MCU黄线为学生接线硬件接线:19程序功能:开关PTA7-4分别控制着指示灯PTA3-0亮暗开关PTB0\PTC0其中之一闭合,指示灯PTB7-1与PTC1交替暗亮;若两个均未闭合,则指示灯PTB1与PTC1
均不亮;若两个均闭合,则两个指示灯均亮.20程序清单:程序说明口地址定义变量定义主程序初始化子程序复位矢量21*------程序说明--------------------------------**文件名:IOEXMA.ASM*硬件连接:PTA7-4接开关,PTA3-0接指示灯*PTB1接指示灯,PTB0接开关*PTC1接指示灯,PTC0接开关*程序描述:①开关PTA7-4分别控制着指示灯PTA3-0暗*②开关PTB0、PCT0其中之一闭合指示PTB7-1*与PTC1交替暗亮,若两个均未闭合则指示灯*PTB1与PTC1均不亮,若两个均闭合则两排*指示灯均亮。*目的:I/O口的基本使用方法*说明:仅作为基本教学例程*----------------------------------------------*
22*-----口地址定义—————————————————DDRAequ$0004;A口数据方向寄存器
PTAequ$0000;A口数据寄存器
PTAPUEequ$000D;A口上拉电阻允许寄存器
DDRBequ$0005;B口数据方向寄存器
PTBequ$0001;B口数据寄存器
DDRCequ$0006;C口数据方向寄存器
PTCequ$0002;C口数据寄存器RAMstartAddrequ$0040;RAM的起始地址(因芯片不同可以更改)FlashStartAddrequ$8000;程序开始地址(因芯片不同可以更改)*-----数据区定义(变量名定义)——————————
orgRAMstartAddrTmpVarrmb1;变量TmpVar,缓冲使用
Light_BCrmb1;BC口灯的状态23*------主程序————————————————
orgFlashStartAddr;程序起始地址MainInit:NOP;初始化——————
SEI;禁止所有中断
LDHX#$023F;堆栈初始化,;放GP32的RAM最高端
TXSJSRInit0;调系统初始化子程序Init0,
;初始学习时跳过此处
24
LDA#%00001111;定义A口7-4为输入,3-0为输出
STADDRALDA#%11110000;定义A口7-4有上拉电阻
STAPTAPUELDA#%11111110;定义B口7-1为输出,0为输入
STADDRBSTADDRC;定义C口7-1为输出,0为输入
MOV#$FF,Light_BC;BC口灯的状态赋初值25Start:;程序总循环入口——
NOPLDAPTA;读取A口状态
NSA;A口7-4输入控制A口3-0输出
;刚好为A.7-4->A.3-0COMASTAPTALDAPTB;取开关PTB0状态,0-闭合
AND#%00000001;剩下PTB0位
STATmpVar;放入变量TmpVar26
NOPLDAPTC;取开关PTC0状态,0-闭合
AND#%00000001;剩下PTC0位
NOPADDTmpVar;经过此运算若A=0,两个均闭合
;若=1,有一个闭合;=2,均未闭合
CBEQA#$0,Light0;比较,相等转移,A=0转向Light027
NOPCBEQA#$1,Light1;A=1转Light1NOP;A=2,两排均不亮
LDA#$FF;两排灯均不亮1-不亮
STAPTBSTAPTCBRAIO_End;转IO_END,延时28Light0:LDA#$00;两排灯均亮0-亮
STAPTBSTAPTCBRAIO_End;无条件转IO_ENDLight1:LDALight_BC;两排灯之一亮0-亮
STAPTB;驱动B口灯
NEGA;求补命令
STAPTC;驱动B口灯
STALight_BC;保存状态29IO_End:LDA#$FE;延时Delay1:LDX#$FCDelay2:NOPNOPNOPDBNZXDelay2DBNZADelay1BRAStart;无条件转开始处*-------------------------------------------30*------子程序--------------------------*Init0:;系统初始化Init0子程序
LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003A
31
BSET5,$0036BSET7,$0037BSET4,$0036RTS*--------复位矢量----------------------------
ORG$FFFE;复位矢量
DWMainInit32备注说明:
仅作为基本教学例程33串行通信及AD转换实验实验目的实验器材硬件接线VB界面软件功能程序清单备注说明<<<34实验目的:A/D转换,单片机异步串行通信
35实验器材:1.SD-1型在线编程实验仪2.导线若干36硬件接线:VCCPTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCU
PTC4PTB7PTB6PTB5PTB4PTB3PTB2PTB1PTB0VCC37VB界面:38软件功能:由PORTB口的模拟量输入,通过单片机的A/D转换器采集8路数据,并放在ADBUF开始的地址中。再在INBUF中放开关量。发86给PC机作为握手信号,进行通信测试,PC机判断后确认,发86作为确认信号,单片机收到86后,把模拟量0-7和开关量送PC机显示。39程序清单:文件说明口地址定义SCI寄存器A/D寄存器数据区定义主程序A/D转换串行通信输出串行通信输入从PC机接收数据,并存储后送PTA输出把在INBUF和ADBUFF的数据送PC机输出中断矢量40*---------文件说明-------------------------------------------**文件名:sci.as*硬件连接:PORTA口输出它的PTA7-0接OUT的7-0号*指示灯(A0作为运行指示不受其它数据控制)PORTB作为AD输入连接,*PORTB口为模拟量输入口,PORTC的C0-4接IN的5个拨位开关0-4作为开关*输入串行口与微机串行口相接(9600,N,8,1)*程序描述:1.由PORTB口的模拟量输入,通过单片机的A/D转换器采集8*路数据,并放在ADBUF开始的地址中*2.再在INBUF中放开关量*3.发86给PC机作为握手信号,进行通信测试,PC机判断后确*认,发86作为确认信号,单片机收到86后,把模拟量0-7和*开关量送PC机显示*目的:A/D转换,单片机异步串行通信*------------------------------------------------------------*41*----口地址定义----------------------------PTAEQU$0000;A口数据寄存器PTBEQU$0001;B口数据寄存器PTCEQU$0002;C口数据寄存器PTDEQU$0003;D口数据寄存器DDRAEQU$0004;A口数据方向寄存器DDRBEQU$0005;B口数据方向寄存器DDRCEQU$0006;C口数据方向寄存器DDRDEQU$0007;D口数据方向寄存器DDREEQU$0008;E口数据寄存器42*----SCI寄存器-----------------------------SCS1EQU$0016;SCI状态寄存器1B-SCTEEQU7;发送缓冲区空标志位B-TCEQU6;发送完成标志位B-SCRFEQU5;接收器满标志位SCDREQU$0018;SCI数据寄存器*---A/D寄存器-----------------------------ADSCREQU$003C;A/D转换状态和控制寄存器B-COCOEQU7;转换完成标志位ADREQU$003D;A/D转换数据寄存器ADCLKEQU$003E;A/D转换输入时钟寄存器RAMstartAddrequ$0040;RAM的起始地址(因芯片不同可以更改)FlashStartAddrequ$8000;程序开始地址(因芯片不同可以更改)43*----数据区定义(变量定义)--------------
ORGRAMstartAddr;RAM的起始地址INBUFRMB1;1字节存放5位开关量ADBUFRMB8;8字节存放8路A/D转换结果ONOFFRMB1;1字节存放从PC的数据
TMPVARRMB1;暂存使用44*----主程序---------------------------------
ORGFlashStartAddr;程序起始地址MainInit::NOPLDA#$3E;A/D初始化2分频、使用内部总线时钟
STAADCLKLDA#$FF;定义PORTA输出
STADDRALDA#$00STAPTASTAONOFF;ONOFF=0LDA#$00;定义PORTB,PORTC作为输入
STADDRBSTADDRC 45*-------A/D转换------------------------------Main:NOP;循环获得8路AD值
LDHX#$0;H:X=0GA-REPEAT:TXA;X寄存器送到累加器
STAADSCR;选定一路A/D,启动转换
BRCLR7,ADSCR,*;等待A/D转换完成
LDAADR;A/D转换结果给ASTAADBUF,X;A给{ADBUF+X},储存数据
AIX#1;下一存储单元
CPX#$08;判断8路转换是否完成
BNEGA-REPEAT;循环8次转换8个通道模拟量46*----串行通信输出-------------------------------GET-IN:LDAPTC;5位开关量采集
STAINBUF;暂放INBUFNOPLDA#$56;把86(16进制数56)为握
;手信号送出到PC中
BRCLR7,SCS1,*;等待以前数据全部发出,
;SCTE置1,发送缓冲区空
STASCDR;发送缓冲区空时,
;可向SCI数据寄存器送数
47*----串行通信输入-----------------------------
NOPLDHX#0WS-REPE1:BRSET5,SCS1,WS-RECE1;测试SCRF位,
;判断接收缓冲器是否满
NOPNOPAIX#1;延时等待
CPHX#$FFFFBNEWS-REPE1BRADISP1;超时退出WS-RECE1:LDASCDR;读取收到的数据
48
CMP#$56;判断是否为确认信号86
BNEDISP1;不是退出,是就开始通信
NOPLDHX#0WS-REPE2:BRSET5,SCS1,WS-RECE2;测试SCRF位,
;判断接收缓冲器是否满
NOPNOPAIX#1;延时等待
CPHX#$6688BNEWS-REPE2;超时退出
BRADISP149*----从PC机接收数据,并储存后送PTA输出----------*----(A.0不受影响)----------------------------WS-RECE2LDASCDRNOPAND#$FE;A0=0STATMPVAR;暂时缓存
LDAONOFFAND#$1;留下A.0ORATMPVAR;处理接收的数据,放在A中
STAONOFF;储存接收数据在ONOFF中
NOP;送A/D值50*----把在INBUF和ADBUFF的数据送PC机输出--------
LDHX#$0SA-REPEAT:LDAINBUF,XBRCLR7,SCS1,*;SCTE置1,
;发送缓冲区空
STASCDR;A给SCDR,发送出去
AIX#1CPX#$09;9个数据输出
BNESA-REPEAT51DISP1:NOPLDAONOFFEOR#$1;把原A.0取反,使灯闪烁
STAONOFFSTAPTABRAMAIN***********************************************----中断矢量---------------------------------
ORG$FFFE;复位矢量
DWMainInit:52备注说明:单片机与PC机使用串行异步通信。在此程序下,通过PC机下的VB6.0控制程序构成一定功能的微机控制系统。53键盘编程实验实验目的实验器材硬件接线软件功能程序清单备注说明<<<54实验目的:键盘查询,键盘中断,键值识别,键盘编码.55实验器材:1.SD-1型在线编程实验板2.导线若干56硬件接线:红线为学生接线PTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCUPTC4内置电阻VCC572
DE键值表:
1
EE3
BE
4
7E5
ED6
DD7
DD8
7D9
EB0
DB
A
BB
B
7B
C
E7
D
D7
E
B7
F
77键值定义58软件功能:开始运行时,指示灯7亮,等待键盘按键。按下“D”键进入运行状态,指示灯7闪烁。在指示灯7闪烁状态,按“0-9”任意一键,指示灯3-0显示对应的二进制值(0为灯亮,1为灯暗,如1的二进制为0001,显示应为“亮亮亮暗”),按“A-F”任意一键,指示灯3-0全暗。59程序清单:程序说明口地址定义数据区定义主程序键盘中断初始化子程序扫描读键值子程序键盘中断子程序键盘转化为具体值子程序延时程序子程序中断矢量60*---------程序说明----------------------------------------**文件名:key.asm*使用4*4键盘实现输入控制*硬件连接:*PTA7-4接4根键盘列线(X4-1),PTA3-0接4根键盘行线*(Y4-1)*PTC4接指示灯7(OUT7),PTC3-0分别接指示灯3-0(OUT3-0)*程序描述:1.开始运行时,指示灯7亮,等待键盘按键*2.按下“D”键进入运行状态,指示灯7闪烁*3.在指示灯7闪烁状态,按“0-9”任意一键,指示灯3-0*显示对应的二进制值(0为灯亮,1为灯暗,如1的二进制为0001*显示应为“亮亮亮暗”),按“A-F”任意一键,指示灯3-0全暗。*目的:键盘查询,键盘中断,键值识别,键盘编码*---------------------------------------------------------*61*----口地址定义-------------------------------------------------DDRAEQU$0004;A口数据方向寄存器PTAEQU$0000;A口数据寄存器PTAPUEEQU$000D;A口上拉电阻允许寄存器DDRCEQU$0006;C口数据方向寄存器PTCEQU$0002;C口数据寄存器INTKBSCREQU$001A;键盘状态和控制寄存器INTKBIEREQU$001B;键盘中断允许寄存器62*-----数据区定义(变量定义)-----------------
ORG$0090TMPVAR1RMB1;变量TMPVAR1,缓冲使用TMPVAR2RMB1;变量TMPVAR2,缓冲使用KBVALUERMB1;存放键盘按键值PTCSTATERMB1;PTC口状态变量RAMstartAddrequ$0040;RAM的起始地址(因芯片不同可以更改)FlashStartAddrequ$8000;程序开始地址(因芯片不同可以更改)*********************************************63
ORGFlashStartAddr
;程序起始地址*----主程序----------------------------------------MainInit:NOPLDA#$00;定义C口之前复位PTCSTAPTCLDA#%00011111;定义C口4-0为输出
STADDRC;C口接指示灯
STAPTC;初始时指示灯熄灭
BCLR4,PTC;PTC4为0,指示灯7点亮;表示进入开始状态64;--------A口接键盘,查询等待按键-----------
LDA#$00;定义A口前复位PTASTAPTALDA#%00001111STADDRALDA#%11110000STAPTAPUE65MainIni1:JSRKBA;取得键值在A中
STAKBVALUE;键值放在KBVALUE中;作为KBdef的入口
JSRKBdef;具体值在A中
cmp#$46;ASCII(“F”)是否为$46
BNEMainIni1;不是等待“F”键;-------设置键盘中断----------------------------JSRKBInit;已按“F”键,进入运行状态,
;执行键盘中断初始化子程序
BCLR1,INTKBSCR;开放键盘中断
CLI66
;----开始总循环处理键盘------------------Start:NOP;----使灯闪烁-----------------------------
BCLR4,PTC;PTA4=0,电亮指示灯7
LDA#$08JSRDelaysubBSET4,PTC;PTA4=1,熄灭指示灯7
LDA#$08JSRDelaysub
67
JSRKbde;执行键盘转化为具体值子程序,;转成键定义值
CMP#$39;测试是否是0-9
BHIStart1;大于ASCII(“9”)到Start1SUB#$30;数字实际值=ASCII值-$30
STAPTC;送PTC口,由指示灯3-0显示
BRAStartStart1:LDA#$FF;大于ASCII(“9”),消灭指示灯
STAPTCJMPStart;继续循环处理68*-键盘中断初始化子程序(从KBInit开始)---------------*功能:对被定义为键盘中断的引脚初始化,但未开放键盘中断*占用CPU内寄存器:A*---------------------------------------------------KBInit:LDA#$00;定义A口之前复位PTASTAPTALDA#%00001111;定义A口7-4输入作为列,;3-0输出作为行
STADDRALDA#%11110000;定义A口7-4有上拉电阻
STAPTAPUEBSET1,INTKBSCR;屏蔽键盘中断
LDA#%11110000;允许KBIE7-4PIN中断进入
STAINTKBIERBSET2,INTKBSCR;清除键盘中断
RTS69*----扫描读键值子程序(从KBA开始)----------------*功能:扫描一次接在PTA口的4*4键盘(PTA7-4接4根键盘*(X4-1),PTA3-0接4根键盘行线(Y4-1)上的按键(使*用行扫描法),键值放在A中,若无按键,A中值$FF*占用内存:TMPVAR1(缓冲使用)*出口:A=键值*-------------------------------------------------KBA:MOV#%11111110,TMPVAR1;第一根行线为0
LDX#$04;扫描4根行线KB1:LDAPTA;取PTA给AORA#%00001111;PTA7-4保留原态,PTA3-0为1
ANDTMPVAR1;令PTAn=0,n=0,1,2,3STAPTA;处理后给PTA以便查询70
NOPNOPLDAPTA;查第n列上是否有键按下
AND#%11110000;保留PTA7-4列值,令低PTA3-0=0CBEQA#$F0,KB2;A等于$F0,本行线没键按下;A不等于$F0,本行有键按下
LDAPTA;A放键值
BRAKB3;转到KB3结束中断KB2:SEC;令C=1ROLTMPVAR1;使下一个行线为0,查下一行
DBNZXKB1;对行线循环
LDA#$FF;没有键被按下为$FFKB3:RTS71*---键盘中断子程序(从KBint开始)----------------*功能:键盘中断程序,键值放入内存KBVALUE中*调用子程序:扫描法读键值子程序(KBA),*键盘中断初始化子程序(KBInit)*出口:第0页内存单元KBVALUE中为键值*------------------------------------------------Bint:PSHH;保护HSEIBSET1,INTKBSCR;禁止键盘中断;----以下为中断程序任务--------------------------
JSRKBA;调子程序KBA,键值放在A中
STAKBVALUE;放入内存KBVALUE;----以上为中断程序任务--------------------------72
PULH;H出栈
JSRKBInit;调用键盘中断初始化子程序
BCLR1,INTKBSCR;开放键盘中断
CLIRTI*****************************************************----键盘转化为具体值子程序(从KBdef开始)----------*功能:键值转为键盘表面具体的字符或符号代表值*入口:内存第0页中KBVALUE为键值,使用键值编号表*占用CPU寄存器:X(存放相对地址)*出口:A=键定义值*---------------------------------------------------KBdef:LDHX#$000073KBkey1:LDAKBTABLE,XBEQKBkey3;=0,表示表中未定义此键值
CMPKBVALUE;与KBVALUE入口键值相比较
BNEKBkey2;不等,未找到转KBkey2INCX;找到地址加1
LDAKBTABLE,X;取键定义值给ABRAKBkeyrKBkey2:INCXINCXBRAKBkey174KBkey3:LDA#$FF;未定义键用FF标志KBkeyr:RTSKBTABLEFCB$EE,"1",$DE,"2",$BE,"3",$7E,"4"FCB$ED,"5",$DD,"6",$BD,"7",$7D,"8"FCB$EB,"9",$DB,"0",$BB,"A",$7B,"B"FCB$E7,"C",$D7,"D",$B7,"E",$77,"F"FCB$00***********************************************75*-----程序延时程序子程序(Delaysub)-----------*功能:程序方法延时,延时长短由入口A中的数值决定*入口:A=延时长度*占用内存:无*占用寄存器:A*----------------------------------------------Delaysub:PSHHPSHXDelay1:LDHX#$558876Delay2:NOPAIX#-1CPHX#$0000BNEDelay2DBNZADelay1PULXPULHRTS*********************************************------中断矢量-------------------------------
ORG$FFE0;键盘中断矢量
DWKBintORG$FFFE;复位矢量
DWMainInit77液晶显示实验实验目的实验器材硬件接线VB界面软件功能程序清单备注说明<<<78实验目的:
不使用单片机串行外设接(SPI)进行点阵字符型液晶显示(LCD)编程79实验器材:1.SD-1型在线编程实验仪2.LCD(HD44780)3.导线若干80硬件接线:16151413121110090807060504030201LCD(HD44780)PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC2PTC1PTC0MC68HC908GP32VCC81VB界面:82程序功能:开始运行时,LCD显示“WaitReceiving..”等待接收字符,当收到16个字符时,显示之,重复此功能83程序清单:程序说明口地址定义SCI串行通信口地址变量定义主程序系统初始化串行口初始化LCD初始化子程序LCD命令执行子程序LCD显示子程序中断矢量84*------程序说明-------------------------------------**文件名:LCD.ASM*硬件连接:1.LCD的DB0-7与单片机的PORTA的PTA0-7连接作为*输出*2.LCD的RS,R/W,E与单片机的PTC0,PTC1,PTC2连接*程序描述:1.开始运行时,LCD显示“WaitReceiving..”*2.等待接收字符,当收到16个字符时显示之,重复*此功能*实验目的:不使用单片机串行外设接口(SPI)进行点阵字符*型液晶显示(LCD)编程*--------------------------------------------------*85*------口地址定义--------------------------------PTAEQU$0000;A口数据寄存器DDRAEQU$0004;A口数据方向寄存器PTCEQU$0002;C口数据寄存器DDRCEQU$0006;C口数据方向寄存器LCD-RSEQU0;LCD寄存器选择信号接PTC0LCD-RWEQU1;读写信号接PTC1LCD-EEQU2;LCD使能信号接PTC286*----SCI串行通信口地址-----------------------------SCC1EQU$0013;SCI控制寄存器1SCC2EQU$0014;SCI控制寄存器2SCS1EQU$0016;串行通信接口状态寄存器地址SCDREQU$0018;串行通信接口数据寄存器地址SCBREQU$0019;SCI波特率寄存器FULLEQU5;用于SCI接收缓冲器是否满标志位RAMstartAddrequ$0040;RAM的起始地址(因芯片不同可以更改)FlashStartAddrequ$8000;程序开始地址(因芯片不同可以更改)*-----变量定义----------------------------------------
ORGRAMstartAddr;RAM的起始地址LCD-BUFFERRMB16;存放16字节87**************************************************-----主程序-------------------------------------
ORGFlashStartAddr;程序起始地址MAININIT:NOPLDA#%11111111;A口为输出
STADDRALDA#%00010111;C口的PTC0-2为输出
STADDRC88*----串行口初始化-------------------------------
LDA#%01000000;D6(ENSCI)=1,允许SCI,
;其它位为0,正常码输出
;8位数据,无检验
STASCC1LDA#%00001100;允许发送器,允许接收器,
;不允许发送与接收中断
STASCC2LDA#%00000010;波特率为9600
STASCBR89
LDHX#$00DISPLAY1:;把要显示的16个初始字符
;放入LCD-BUFFER中
LDADISPLAYBYTES,XSTALCD-BUFFER,XAIX#1CPHX#$10BNEDISPLAY1;循环16次
BRASTARTDISPLAYBYTESFCB"WAITRECEIVING.."START:JSRINIT-LCD;LCD初始化
JSRSHOW-LCD-BUFFER;把LCD-BUFFER中的16个字符
;送LCD显示90
LDHX#$00DISPLAY2:;从PC机接收16个字符放入
;LCD-BUFFER开始的内存中
BRCLRFULL,SCS1,*;与PC机串行通信,
;判断接收器是否满
LDASCDR;读SCI数据寄存器
STALCD-BUFFER,XAIX#1CPHX#$10BNEDISPLAY2JMPSTART*************************************************91*---INIT-LCD(LCD初始化子程序)-------------------*入口:无*功能:初始化LCD(HD44780)*调用子程序:LCDCOMMAND(LCD命令执行子程序)*占用CPU内部寄存器:A,X*------------------------------------------------INIT-LCD:BCLRLCD-RS,PTC;令LCD的RS=0,R/W=0,进行LCD初始化
BCLRLCD-RW,PTCLDA#%00111000;功能设置:8位数据接口,
;2行显示,5*7点阵模式
92
JSRLCDCOMMANDLDA#%00001000;显示开关控制:关显示,
;关光标显示,不闪烁
JSRLCDCOMMANDLDHX#$0020;等待40usDBNZX*BCLRLCD-RS,PTC;RS,RW清零开始清屏
BCLRLCD-RW,PTCLDA#%00000001;清屏指令
JSRLCDCOMMANDLDHX#$2DF;等待清屏完毕,时间>1.6ms93
CLR-LCD-2-MS:;延时
AIX#-1CPHX#0LDA#%00000110;输入方式设置:数据读写操作后,;AC自动增1,显示不动,光标左
JSRLCDCOMMANDLDA#%00010100;光标移位设置:光标右移一个;字符位,AC自动加1
JSRLCDCOMMANDLDA#%00001100;显示开关设置:开显示,;关光标显示,不闪烁
JSRLCDCOMMANDRTS94*----LCDCOMMAND(LCD命令执行子程序)-----------------*入口:A*功能:对A中指令使用PORTA作为输出口,*到LCD进行命令执行或字符显示*占用CPU内部寄存器:A*--------------------------------------------------LCDCOMMAND:PSHH;保护现场
PSHXLDHX#$0020;等待40usDBNZX*STAPTA;把指令码送到A口
95
NOPNOPBSETLCD-E,PTC;LCD开始接受数据,置使能位为1
NOPNOPBCLRLCD-E,PTC;LCD结束接受数据,置使能位为0
LDHX#$0020;等待40usDBNZX*PULX;恢复现场
PULHRTS****************************************************96*----SHOW-LCD-BUFFEER(LCD显示子程序)-----------------*入口:内存LCD-BUFFER开始的16个地址中存放要显示的字符*编码*功能:显示内存LCD-BUFFER开始的16字节数据*调用:LCDCOMMAND子程序*占用CPU内部寄存器:A,HX*----------------------------------------------------SHOW-LCD-BUFFER:;进行显示数据寄存器(DDRAM)地址设置
BCLRLCD-RS,PTCBCLRLCD-RW,PTC;设置前8个字符首DDRAM地址
LDA#%10000000JSRLCDCOMMANDLDHX#$0;显示前8个字符97SHOW-FIRST-8BYTE:BSETLCD-RS,PTC;令LCD的RS=1,R/W=0,写入数;据到DDRAM中
BCLRLCD-RW,PTCLDALCD-BUFFER,X;将{LCD-BUFFER+X}的数据;放入A作为入口
JSRLCDCOMMANDAIX#1CPHX#$8BNESHOW-FIRST-8BYTE98
LDA#%11000000;设置后8个字符首DDRAM地址
BCLRLCD-RS,PTCBCLRLCD-RW,PTCJSRLCDCOMMANDLDHX#$08;显示后8个字符SHOW-NEXT-8BYTE:BSETLCD-RS,PTC;令LCD的RS=1,R/W=0,;写入数据到DDRAM中
BCLRLCD-RW,PTC99
LDALCD-BUFFER,X;将{LCD-BUFFER+X}的数据;放入A作为入口
JSRLCDCOMMANDAIX#1CPHX#$10BNESHOW-NEXT-8BYTERTS*---中断矢量--------------------------------------*
ORG$FFFE;复位向量
DWMAININIT100系统初始化Init0:;系统初始化Init0子程序
LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003ABSET5,$0036BSET7,$0037BSET4,$0036RTS101
不使用单片机串行外设接口(SPI)和74HC164(移位寄存器),使用A口作为输出在LCD上显示。备注说明:102数码管显示实验实验目的实验器材硬件接线VB界面软件功能程序清单备注说明<<<103实验目的:数码管的显示104实验器材:1.SD-1型在线编程实验仪2.数码管3.导线若干105硬件接线:PTB0PTB1PTB2PTB3PTB4PTB5PTB6PTB7PTC0PTC1PTC2PTC3MC68HC908GP32LALBLCLDLELFLGLDPL11L12L13L14LED106LED的VB界面:107软件功能:从PC机收到数字(整数或小数),使4个数字并排在一个数码管上显示,由PC机的VB界面控制显示。108程序清单:程序说明口地址定义串行口地址定义内存变量定义主程序串行口初始化子程序显示子程序
转码子程序延时子程序中断矢量109*--------程序说明---------------------------------------------------*文件名: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界面显示控制*目的:数码管的显示*------------------------------------------------------------------------110*----口地址定义----------------------------------------------PTBEQU$0001;B口数据寄存器DDRBEQU$0005;B口数据方向寄存器PTCEQU$0002;C口数据寄存器DDRCEQU$0006;C口数据方向寄存器PTDEQU$0003;D口数据寄存器DDRDEQU$0007;D口数据方向寄存器111*----串行口地址定义-------------------------------------SCS1EQU$0016
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 青海能源投资集团校招面笔试题及答案
- 2026西藏拉萨墨竹工卡县机关事业单位编外聘用人员招聘5人备考题库含完整答案详解【考点梳理】
- 2026贵州贵阳观山湖中学招聘中小学教师备考题库【名校卷】附答案详解
- 2026广东惠州市惠城职业技术学校春季学期招聘化工实训室管理员(外聘合同制)1人备考题库含答案详解【模拟题】
- 2026中冶京诚工程技术有限公司春季校园招聘备考题库及完整答案详解【各地真题】
- 2026雀巢中国春季校园招聘备考题库及一套完整答案详解
- 西南证券股份有限公司2026届春季校园招聘备考题库及答案详解(真题汇编)
- 2026四川宜宾酒股份有限公司下属子公司第一批员工招聘9人备考题库附参考答案详解(预热题)
- 2026广东东莞市望牛墩镇中心幼儿园招聘备考题库(a卷)附答案详解
- 2026北京大学力学与工程科学学院招聘1名劳动合同制工作人员备考题库附参考答案详解【夺分金卷】
- 2026-2028年中国冰棍行业生态全景与战略纵深研究报告:政策、技术、资本与消费四重驱动下的产业重构与机遇地图
- 江苏苏州市2025-2026学年高二上学期期末考试英语试题(含答案)
- 国家职业资格认证考试报名试题及答案
- 公司级安全教育培训考试卷测试题(答案)
- (正式版)DB51∕T 2732-2025 《用材林培育技术规程 杉木》
- 《西游记知识竞赛》题库及答案(单选题100道)
- DB34∕T 5225-2025 风景名胜区拟建项目对景观及生态影响评价技术规范
- 2026年苏州工业职业技术学院单招职业技能测试必刷测试卷附答案
- 2025年陕西省中考化学试题答案解读及备考指导课件
- 新市民课件教学课件
- GB/T 20013.1-2025核医学仪器例行试验第1部分:γ辐射计数系统
评论
0/150
提交评论