




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及其嵌入式应用
实验根本实验综合实例<<<1根本实验程序框架开关量输入输出(IO)实验串行通信及AD转换实验键盘编程实验液晶显示实验数码管显示实验FLASH编程实验定时器溢出中断实验定时器输入中断捕捉实验<<<2程序框架实验目的实验器材硬件接线软件功能程序清单备注说明<<<3实验目的:了解程序根本框架4实验器材:1.SD-1型在线编程实验仪2.导线假设干5硬件接线:VCCPTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCUPTC4PTB7PTB6PTB5PTB4PTB3PTB2PTB1PTB06软件功能:PTA口的模拟量输出,控制指示灯程序执行指示灯闪烁7程序清单:文件说明口地址定义数据区定义主程序系统初始化及中断矢量延时子程序8*---------文件说明------------------------------------*文件名:PrgFrame.ASM*硬件连接:PTA.1接指示灯*程序描述:指示灯PTA.1闪烁*目的:第一个MotorolaMCU程序框架*说明:提供MotorolaMCU的编程框架,供教学入门使用*-----------------------------------------------------9*----口地址定义----------------------------PTAEQU$0000;A口数据存放器DDRAEQU$0004;A口数据方向存放器10RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序开始地址〔因芯片不同可以更改〕*数据区定义〔变量名定义〕——————————————————orgRAMstartAddr;RAM的起始地址N1rmb1;变量N1,缓冲使用11*主程序——————————————————————————————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;转总循环入口处 12Init0:;系统初始化Init0子程序LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003ABSET5,$0036BSET7,$0037BSET4,$0036RTS*----中断矢量---------------------------------ORG$FFFE;复位矢量DWMainInit13延时子程序DelaySub:;延时0.1秒PSHH;保据存放器HXPSHXDelaySub1:LDHX#$FFFFDelaySub2:PSHA;保护存放器ALDA#$FFDelaySub3:DBNZADelaySub3PULADBNZXDelaySub2DBNZADelaySub1PULXPULHRTS14开关量输入输出(IO)实验实验目的实验器材硬件接线程序功能程序清单备注说明<<<15实验目的:掌握I/O口的根本使用方法16实验器材:1.SD-1型在线编程实验仪2.导线假设干17vccvccPTC0PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0vccPTB1PTC1PTB0MOTOROLAGP32MCU黄线为学生接线硬件接线:18程序功能:开关PTA7-4分别控制着指示灯PTA3-0亮暗开关PTB0\PTC0其中之一闭合,指示灯PTB7-1与PTC1交替暗亮;假设两个均未闭合,那么指示灯PTB1与PTC1均不亮;假设两个均闭合,那么两个指示灯均亮.19程序清单:程序说明口地址定义变量定义主程序初始化子程序复位矢量20*------程序说明--------------------------------**文件名:IOEXMA.ASM*硬件连接:PTA7-4接开关,PTA3-0接指示灯*PTB1接指示灯,PTB0接开关*PTC1接指示灯,PTC0接开关*程序描述:①开关PTA7-4分别控制着指示灯PTA3-0暗*②开关PTB0、PCT0其中之一闭合指示PTB7-1*与PTC1交替暗亮,假设两个均未闭合那么指示灯*PTB1与PTC1均不亮,假设两个均闭合那么两排*指示灯均亮。*目的:I/O口的根本使用方法*说明:仅作为根本教学例程*----------------------------------------------*21*-----口地址定义—————————————————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口灯的状态22*------主程序————————————————orgFlashStartAddr;程序起始地址MainInit:NOP;初始化——————
SEI;禁止所有中断LDHX#$023F;堆栈初始化,;放GP32的RAM最高端TXSJSRInit0;调系统初始化子程序Init0,
;初始学习时跳过此处
23LDA#%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口灯的状态赋初值24Start:;程序总循环入口——
NOPLDAPTA;读取A口状态NSA;A口7-4输入控制A口3-0输出
;刚好为A.7-4->A.3-0COMASTAPTALDAPTB;取开关PTB0状态,0-闭合AND#%00000001;剩下PTB0位STATmpVar;放入变量TmpVar25NOPLDAPTC;取开关PTC0状态,0-闭合AND#%00000001;剩下PTC0位NOPADDTmpVar;经过此运算假设A=0,两个均闭合;假设=1,有一个闭合;=2,均未闭合CBEQA#$0,Light0;比较,相等转移,A=0转向Light026
NOPCBEQA#$1,Light1;A=1转Light1NOP;A=2,两排均不亮LDA#$FF;两排灯均不亮1-不亮STAPTBSTAPTCBRAIO_End;转IO_END,延时27Light0:LDA#$00;两排灯均亮0-亮STAPTBSTAPTCBRAIO_End;无条件转IO_ENDLight1:LDALight_BC;两排灯之一亮0-亮STAPTB;驱动B口灯NEGA;求补命令STAPTC;驱动B口灯STALight_BC;保存状态28IO_End:LDA#$FE;延时Delay1:LDX#$FCDelay2:NOPNOPNOPDBNZXDelay2DBNZADelay1BRAStart;无条件转开始处*-------------------------------------------29*------子程序--------------------------*Init0:;系统初始化Init0子程序LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003A
30BSET5,$0036BSET7,$0037BSET4,$0036RTS*--------复位矢量----------------------------
ORG$FFFE;复位矢量DWMainInit31备注说明:
仅作为根本教学例程32串行通信及AD转换实验实验目的实验器材硬件接线VB界面软件功能程序清单备注说明<<<33实验目的:A/D转换,单片机异步串行通信
34实验器材:1.SD-1型在线编程实验仪2.导线假设干35硬件接线:VCCPTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCUPTC4PTB7PTB6PTB5PTB4PTB3PTB2PTB1PTB0VCC36VB界面:37软件功能:由PORTB口的模拟量输入,通过单片机的A/D转换器采集8路数据,并放在ADBUF开始的地址中。再在INBUF中放开关量。发86给PC机作为握手信号,进行通信测试,PC机判断后确认,发86作为确认信号,单片机收到86后,把模拟量0-7和开关量送PC机显示。38程序清单:文件说明口地址定义SCI存放器A/D存放器数据区定义主程序A/D转换串行通信输出串行通信输入从PC机接收数据,并存储后送PTA输出把在INBUF和ADBUFF的数据送PC机输出中断矢量39*---------文件说明-------------------------------------------**文件名: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转换,单片机异步串行通信*------------------------------------------------------------*40*----口地址定义----------------------------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口数据存放器41*----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;程序开始地址〔因芯片不同可以更改〕42*----数据区定义〔变量定义〕--------------ORGRAMstartAddr;RAM的起始地址INBUFRMB1;1字节存放5位开关量ADBUFRMB8;8字节存放8路A/D转换结果ONOFFRMB1;1字节存放从PC的数据TMPVARRMB1;暂存使用43*----主程序---------------------------------ORGFlashStartAddr;程序起始地址MainInit::NOPLDA#$3E;A/D初始化2分频、使用内部总线时钟STAADCLKLDA#$FF;定义PORTA输出STADDRALDA#$00STAPTASTAONOFF;ONOFF=0LDA#$00;定义PORTB,PORTC作为输入STADDRBSTADDRC 44*-------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个通道模拟量45*----串行通信输出-------------------------------GET-IN:LDAPTC;5位开关量采集STAINBUF;暂放INBUFNOPLDA#$56;把86〔16进制数56〕为握;手信号送出到PC中BRCLR7,SCS1,*;等待以前数据全部发出,;SCTE置1,发送缓冲区空STASCDR;发送缓冲区空时,;可向SCI数据存放器送数46*----串行通信输入-----------------------------NOPLDHX#0WS-REPE1:BRSET5,SCS1,WS-RECE1;测试SCRF位,
;判断接收缓冲器是否满NOPNOPAIX#1;延时等待CPHX#$FFFFBNEWS-REPE1BRADISP1;超时退出WS-RECE1:LDASCDR;读取收到的数据
47CMP#$56;判断是否为确认信号86
BNEDISP1;不是退出,是就开始通信NOPLDHX#0WS-REPE2:BRSET5,SCS1,WS-RECE2;测试SCRF位,
;判断接收缓冲器是否满NOPNOPAIX#1;延时等待CPHX#$6688BNEWS-REPE2;超时退出BRADISP148*----从PC机接收数据,并储存后送PTA输出----------*----〔A.0不受影响〕----------------------------WS-RECE2LDASCDRNOPAND#$FE;A0=0STATMPVAR;暂时缓存LDAONOFFAND#$1;留下A.0ORATMPVAR;处理接收的数据,放在A中STAONOFF;储存接收数据在ONOFF中NOP;送A/D值49*----把在INBUF和ADBUFF的数据送PC机输出--------LDHX#$0SA-REPEAT:LDAINBUF,XBRCLR7,SCS1,*;SCTE置1,
;发送缓冲区空STASCDR;A给SCDR,发送出去AIX#1CPX#$09;9个数据输出BNESA-REPEAT50DISP1:NOPLDAONOFFEOR#$1;把原A.0取反,使灯闪烁STAONOFFSTAPTABRAMAIN***********************************************----中断矢量---------------------------------ORG$FFFE;复位矢量DWMainInit:51备注说明:单片机与PC机使用串行异步通信。在此程序下,通过PC机下的VB6.0控制程序构成一定功能的微机控制系统。52键盘编程实验实验目的实验器材硬件接线软件功能程序清单备注说明<<<53实验目的:键盘查询,键盘中断,键值识别,键盘编码.54实验器材:1.SD-1型在线编程实验板2.导线假设干55硬件接线:红线为学生接线PTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCUPTC4内置电阻VCC562
DE键值表:
1
EE3
BE
4
7E5
ED6
DD7
DD8
7D9
EB0
DBA
BBB
7BC
E7D
D7E
B7F
77键值定义57软件功能:开始运行时,指示灯7亮,等待键盘按键。按下“D〞键进入运行状态,指示灯7闪烁。在指示灯7闪烁状态,按“0-9〞任意一键,指示灯3-0显示对应的二进制值〔0为灯亮,1为灯暗,如1的二进制为0001,显示应为“亮亮亮暗〞〕,按“A-F〞任意一键,指示灯3-0全暗。58程序清单:程序说明口地址定义数据区定义主程序键盘中断初始化子程序扫描读键值子程序键盘中断子程序键盘转化为具体值子程序延时程序子程序中断矢量59*---------程序说明----------------------------------------**文件名: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全暗。*目的:键盘查询,键盘中断,键值识别,键盘编码*---------------------------------------------------------*60*----口地址定义-------------------------------------------------DDRAEQU$0004;A口数据方向存放器PTAEQU$0000;A口数据存放器PTAPUEEQU$000D;A口上拉电阻允许存放器DDRCEQU$0006;C口数据方向存放器PTCEQU$0002;C口数据存放器INTKBSCREQU$001A;键盘状态和控制存放器INTKBIEREQU$001B;键盘中断允许存放器61*-----数据区定义〔变量定义〕-----------------ORG$0090TMPVAR1RMB1;变量TMPVAR1,缓冲使用TMPVAR2RMB1;变量TMPVAR2,缓冲使用KBVALUERMB1;存放键盘按键值PTCSTATERMB1;PTC口状态变量RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序开始地址〔因芯片不同可以更改〕*********************************************62ORGFlashStartAddr
;程序起始地址*----主程序----------------------------------------MainInit:NOPLDA#$00;定义C口之前复位PTCSTAPTCLDA#%00011111;定义C口4-0为输出STADDRC;C口接指示灯STAPTC;初始时指示灯熄灭BCLR4,PTC;PTC4为0,指示灯7点亮;表示进入开始状态63;--------A口接键盘,查询等待按键-----------LDA#$00;定义A口前复位PTASTAPTALDA#%00001111STADDRALDA#%11110000STAPTAPUE64MainIni1:JSRKBA;取得键值在A中STAKBVALUE;键值放在KBVALUE中;作为KBdef的入口JSRKBdef;具体值在A中cmp#$46;ASCII〔“F〞〕是否为$46BNEMainIni1;不是等待“F〞键;-------设置键盘中断----------------------------JSRKBInit;已按“F〞键,进入运行状态,;执行键盘中断初始化子程序BCLR1,INTKBSCR;开放键盘中断CLI65
;----开始总循环处理键盘------------------Start:NOP;----使灯闪烁-----------------------------BCLR4,PTC;PTA4=0,电亮指示灯7LDA#$08JSRDelaysubBSET4,PTC;PTA4=1,熄灭指示灯7LDA#$08JSRDelaysub
66JSRKbde;执行键盘转化为具体值子程序,;转成键定义值CMP#$39;测试是否是0-9BHIStart1;大于ASCII〔“9〞〕到Start1SUB#$30;数字实际值=ASCII值-$30STAPTC;送PTC口,由指示灯3-0显示BRAStartStart1:LDA#$FF;大于ASCII〔“9〞〕,消灭指示灯STAPTCJMPStart;继续循环处理67*-键盘中断初始化子程序〔从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;去除键盘中断RTS68*----扫描读键值子程序〔从KBA开始〕----------------*功能:扫描一次接在PTA口的4*4键盘〔PTA7-4接4根键盘*〔X4-1〕,PTA3-0接4根键盘行线〔Y4-1〕上的按键〔使*用行扫描法〕,键值放在A中,假设无按键,A中值$FF*占用内存:TMPVAR1〔缓冲使用〕*出口:A=键值*-------------------------------------------------KBA:MOV#%11111110,TMPVAR1;第一根行线为0LDX#$04;扫描4根行线KB1:LDAPTA;取PTA给AORA#%00001111;PTA7-4保存原态,PTA3-0为1ANDTMPVAR1;令PTAn=0,n=0,1,2,3STAPTA;处理后给PTA以便查询69NOPNOPLDAPTA;查第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:RTS70*---键盘中断子程序〔从KBint开始〕----------------*功能:键盘中断程序,键值放入内存KBVALUE中*调用子程序:扫描法读键值子程序〔KBA〕,*键盘中断初始化子程序〔KBInit〕*出口:第0页内存单元KBVALUE中为键值*------------------------------------------------Bint:PSHH;保护HSEIBSET1,INTKBSCR;禁止键盘中断;----以下为中断程序任务--------------------------JSRKBA;调子程序KBA,键值放在A中STAKBVALUE;放入内存KBVALUE;----以上为中断程序任务--------------------------71PULH;H出栈JSRKBInit;调用键盘中断初始化子程序BCLR1,INTKBSCR;开放键盘中断CLIRTI*****************************************************----键盘转化为具体值子程序〔从KBdef开始〕----------*功能:键值转为键盘外表具体的字符或符号代表值*入口:内存第0页中KBVALUE为键值,使用键值编号表*占用CPU存放器:X〔存放相对地址〕*出口:A=键定义值*---------------------------------------------------KBdef:LDHX#$000072KBkey1:LDAKBTABLE,XBEQKBkey3;=0,表示表中未定义此键值CMPKBVALUE;与KBVALUE入口键值相比较BNEKBkey2;不等,未找到转KBkey2INCX;找到地址加1LDAKBTABLE,X;取键定义值给ABRAKBkeyrKBkey2:INCXINCXBRAKBkey173KBkey3: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***********************************************74*-----程序延时程序子程序〔Delaysub〕-----------*功能:程序方法延时,延时长短由入口A中的数值决定*入口:A=延时长度*占用内存:无*占用存放器:A*----------------------------------------------Delaysub:PSHHPSHXDelay1:LDHX#$558875Delay2:NOPAIX#-1CPHX#$0000BNEDelay2DBNZADelay1PULXPULHRTS*********************************************------中断矢量-------------------------------ORG$FFE0;键盘中断矢量DWKBintORG$FFFE;复位矢量DWMainInit76液晶显示实验实验目的实验器材硬件接线VB界面软件功能程序清单备注说明<<<77实验目的:
不使用单片机串行外设接(SPI)进行点阵字符型液晶显示(LCD)编程78实验器材:1.SD-1型在线编程实验仪2.LCD(HD44780)3.导线假设干79硬件接线:16151413121110090807060504030201LCD(HD44780)PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC2PTC1PTC0MC68HC908GP32VCC80VB界面:81程序功能:开始运行时,LCD显示“WaitReceiving..〞等待接收字符,当收到16个字符时,显示之,重复此功能82程序清单:程序说明口地址定义SCI串行通信口地址变量定义主程序系统初始化串行口初始化LCD初始化子程序LCD命令执行子程序LCD显示子程序中断矢量83*------程序说明-------------------------------------**文件名: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)编程*--------------------------------------------------*84*------口地址定义--------------------------------PTAEQU$0000;A口数据存放器DDRAEQU$0004;A口数据方向存放器PTCEQU$0002;C口数据存放器DDRCEQU$0006;C口数据方向存放器LCD-RSEQU0;LCD存放器选择信号接PTC0LCD-RWEQU1;读写信号接PTC1LCD-EEQU2;LCD使能信号接PTC285*----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字节86**************************************************-----主程序-------------------------------------ORGFlashStartAddr;程序起始地址MAININIT:NOPLDA#%11111111;A口为输出STADDRALDA#%00010111;C口的PTC0-2为输出STADDRC87*----串行口初始化-------------------------------LDA#%01000000;D6(ENSCI)=1,允许SCI,
;其它位为0,正常码输出
;8位数据,无检验STASCC1LDA#%00001100;允许发送器,允许接收器,
;不允许发送与接收中断STASCC2LDA#%00000010;波特率为9600STASCBR88
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显示89LDHX#$00DISPLAY2:;从PC机接收16个字符放入;LCD-BUFFER开始的内存中BRCLRFULL,SCS1,*;与PC机串行通信,;判断接收器是否满LDASCDR;读SCI数据存放器STALCD-BUFFER,XAIX#1CPHX#$10BNEDISPLAY2JMPSTART*************************************************90*---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点阵模式91JSRLCDCOMMANDLDA#%00001000;显示开关控制:关显示,
;关光标显示,不闪烁JSRLCDCOMMANDLDHX#$0020;等待40usDBNZX*BCLRLCD-RS,PTC;RS,RW清零开始清屏BCLRLCD-RW,PTCLDA#%00000001;清屏指令JSRLCDCOMMANDLDHX#$2DF;等待清屏完毕,时间>1.6ms92
CLR-LCD-2-MS:;延时AIX#-1CPHX#0LDA#%00000110;输入方式设置:数据读写操作后,;AC自动增1,显示不动,光标左JSRLCDCOMMANDLDA#%00010100;光标移位设置:光标右移一个;字符位,AC自动加1JSRLCDCOMMANDLDA#%00001100;显示开关设置:开显示,;关光标显示,不闪烁JSRLCDCOMMANDRTS93*----LCDCOMMAND(LCD命令执行子程序)-----------------*入口:A*功能:对A中指令使用PORTA作为输出口,*到LCD进行命令执行或字符显示*占用CPU内部存放器:A*--------------------------------------------------LCDCOMMAND:PSHH;保护现场PSHXLDHX#$0020;等待40usDBNZX*STAPTA;把指令码送到A口94NOPNOPBSETLCD-E,PTC;LCD开始接受数据,置使能位为1NOPNOPBCLRLCD-E,PTC;LCD结束接受数据,置使能位为0LDHX#$0020;等待40usDBNZX*PULX;恢复现场PULHRTS****************************************************95*----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个字符96SHOW-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-8BYTE97
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,PTC98
LDALCD-BUFFER,X;将{LCD-BUFFER+X}的数据;放入A作为入口JSRLCDCOMMANDAIX#1CPHX#$10BNESHOW-NEXT-8BYTERTS*---中断矢量--------------------------------------*ORG$FFFE;复位向量DWMAININIT99系统初始化Init0:;系统初始化Init0子程序LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003ABSET5,$0036BSET7,$0037BSET4,$0036RTS100不使用单片机串行外设接口(SPI)和74HC164(移位存放器),使用A口作为输出在LCD上显示。备注说明:101数码管显示实验实验目的实验器材硬件接线VB界面软件功能程序清单备注说明<<<102实验目的:数码管的显示103实验器材:1.SD-1型在线编程实验仪2.数码管3.导线假设干104硬件接线:PTB0PTB1PTB2PTB3PTB4PTB5PTB6PTB7PTC0PTC1PTC2PTC3MC68HC908GP32LALBLCLDLELFLGLDPL11L12L13L14LED105LED的VB界面:106软件功能:从PC机收到数字(整数或小数),使4个数字并排在一个数码管上显示,由PC机的VB界面控制显示。107程序清单:程序说明口地址定义串行口地址定义内存变量定义主程序串行口初始化子程序显示子程序
转码子程序延时子程序中断矢量108*--------程序说明---------------------------------------------------*文件名: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界面显示控制*目的:数码管的显示*------------------------------------------------------------------------109*----口地址定义----------------------------------------------PTBEQU$0001;B口数据存放器DDRBEQU$0005;B口数据方向存放器PTCEQU$0002;C口数据存放器DDRCEQU$0006;C口数据方向存放器PTDEQU$0003;D口数据存放器DDRDEQU$0007;D口数据方向存放器110*----串行口地址定义-------------------------------------SCS1EQU$0016;SCI状态存放器1SCDREQU$0018;SCI数据存放器SCC1EQU$0013;SCI控制存放器1SCC2EQU$0014;SCI控制存放器2SCBREQU$0019;SCI波特率存放器RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序开始地址〔因芯片不同可以更改〕*---内存变量定义------------------------------------------ORGRAMstartAddrPC_BufferRMB4;存放从PC接收的数据Show_BufferRMB4;存放待显示的数据CsRMB1;位选信号111*------主程序-------------------------------------------------ORGFlashStartAddr;初始化Main:LDA#$FF;定义B口为输出STADDRBLDA#$FF;定义C口为输出STADDRCLDA#$FF;定义D口为输出STADDRD112*----串行口初始化-------------------------------------------LDA#%01000000;D6(ENSCI)=1,允许SCI,;其它位为0,正常码输出,;8位数据,无检验STASCC1LDA#%00001100;允许发送器,允许接收器,;不允许发送与接收中断STASCC2LDA#%00000010;波特率为9600STASCBR113Display_Init:;起始数据赋值MOV#$1,PC_BufferMOV#$2,{PC_Buffer+$1}MOV#$3,{PC_Buffer+$2}MOV#$4,{PC_Buffer+$3}Start:JSRTranslate_Num;起始数据转码
JSRShow_Num
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届高考政治二轮复习《法律与生活》命题特点和备考策略探讨
- 2025(统编版)语文四年级下册第一单元教学设计
- 2025年高线密度玻璃纤维直接无捻粗纱项目发展计划
- 探索2024年国际物流师试题及答案
- 2024国际物流的安全管理试题及答案
- 经典CPSM考点试题及答案分享
- CPSM考试优化策略试题与答案
- 餐饮美学基础 课件 2.4形态审美
- 2024年CPMM考试重要理论试题及答案
- 2025年卤代烃合作协议书
- 农村人居环境整治文明积分制试点方案
- 一滴血检测技术
- 法理斗争课件
- 彩虹小学集体备课记录表
- YY/T 1543-2017鼻氧管
- GB/T 7113.4-2011绝缘软管第4部分:丙烯酸酯玻璃纤维软管
- GB/T 18487.1-2015电动汽车传导充电系统第1部分:通用要求
- 110KV升压站工程检验试验计划
- 处方规范书写与管理 课件
- 一汽大众汽车公司介绍
- 浙江省房屋建筑面积测算实施细则(试行)全文20110522
评论
0/150
提交评论