版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1单片机原理及其嵌入式应用单片机原理及其嵌入式应用实实 验验 基本实验 综合实例2基本实验基本实验 程序框架程序框架 开关量输入输出开关量输入输出(io)实验实验 串行通信及串行通信及ad转换实验转换实验 键盘编程实验键盘编程实验 液晶显示实验液晶显示实验 数码管显示实验数码管显示实验 flash编程实验编程实验 定时器溢出中断实验定时器溢出中断实验 定时器输入中断捕捉定时器输入中断捕捉实验实验3程序框架程序框架 实验目的实验目的 实验器材实验器材 硬件接线硬件接线 软件功能软件功能 程序清单程序清单 备注说明备注说明4实验目的实验目的:了解程序基本框架了解程序基本框架5实验器材实验器材: :
2、1.sd-1型在线编程实验仪型在线编程实验仪2.导线若干导线若干6硬件接线硬件接线:vccptc3pta7pta6pta5pta4pta3pta2pta1pta0ptc0ptc1ptc2motorola gp32 mcu ptc4ptb7ptb6ptb5ptb4ptb3ptb2ptb1ptb07软件功能软件功能: ptapta口的模拟量输出,控制指示灯口的模拟量输出,控制指示灯 程序执行指示灯闪烁程序执行指示灯闪烁8程序清单:程序清单: 文件说明文件说明 口地址定义口地址定义 数据区定义数据区定义 主程序主程序 系统初始化及中断矢量系统初始化及中断矢量 延时子程序延时子程序9* *-文件说明文
3、件说明-* *文件名文件名: :prgframe.asmprgframe.asm * *硬件连接硬件连接: :pta.1pta.1接指示灯接指示灯 * *程序描述程序描述: :指示灯指示灯pta.1pta.1闪烁闪烁 * *目的目的: :第一个第一个motorola mcumotorola mcu程序框架程序框架 * *说明说明: :提供提供motorola mcumotorola mcu的编程框架,供教学入门使用的编程框架,供教学入门使用 * *-10* *-口地址定义口地址定义-pta equ $0000 pta equ $0000 ;a;a口数据寄存器口数据寄存器ddra equ $00
4、04 ddra equ $0004 ;a;a口数据方向寄存器口数据方向寄存器11ramstartaddrramstartaddr equequ $0040 ;ram $0040 ;ram的起始地址(因芯片不同可以更改)的起始地址(因芯片不同可以更改)flashstartaddrflashstartaddr equequ $8000 ; $8000 ;程序开始地址(因芯片不同可以更改)程序开始地址(因芯片不同可以更改)* *数据区定义(变量名定义)数据区定义(变量名定义) org org ramstartaddrramstartaddr ;ram ;ram的起始地址的起始地址n1 n1 rmbr
5、mb 1 ; 1 ;变量变量n1,n1,缓冲使用缓冲使用12* *主程序主程序 org org flashstartaddrflashstartaddr ; ;程序起始地址程序起始地址maininitmaininit: ;: ;复位后程序从此开始执行复位后程序从此开始执行 ; ;系统初始化系统初始化 sei ;sei ;禁止所有中断禁止所有中断 ldhx #$023f ;ldhx #$023f ;堆栈初始化,放入堆栈初始化,放入gp32gp32的的ramram最高端最高端 txstxs jsr init0 ; jsr init0 ;调系统初始化子程序调系统初始化子程序init0init0,初始
6、学习时跳过此处初始学习时跳过此处 ; ;i/oi/o初始化初始化 bset 1,ddra ;bset 1,ddra ;设置设置pta.1pta.1为输出为输出 bset 1,pta ;bset 1,pta ;初始时,初始时,pta.1pta.1指示灯指示灯 暗暗 mainloopmainloop: ;: ;程序总循环入口程序总循环入口 bclr 1,pta ;pta.1bclr 1,pta ;pta.1指示灯指示灯“亮亮” mov #$2,n1 ;mov #$2,n1 ;延时子程序延时子程序delaysubdelaysub的时间长度入口的时间长度入口 jsr jsr delaysubdelay
7、sub ; ;调用延时子程序调用延时子程序 bset 1,pta ;bset 1,pta ;初始时,初始时,pta.1pta.1指示灯指示灯 暗暗 mov #$4,n1 ;mov #$4,n1 ;延时子程序延时子程序delaysubdelaysub的时间长度入口的时间长度入口 jsr jsr delaysubdelaysub ; ;调用延时子程序调用延时子程序 ;- ;- jmp jmp mainloopmainloop ; ;转总循环入口处转总循环入口处13init0: ;init0: ;系统初始化系统初始化init0init0子程序子程序 lda #%00000001 ;lda #%000
8、00001 ;初始化初始化config2config2 sta $001e sta $001e lda #%00111101 ; lda #%00111101 ;初始化初始化config1config1 sta $001f sta $001f clr $0036 ; clr $0036 ;初始化初始化ptclptcl mov #$01,$0036 mov #$01,$0036 mov #$01,$0038 mov #$01,$0038 mov #$2c,$0039 mov #$2c,$0039 mov #$80,$003a mov #$80,$003a bset 5,$0036 bset 5,
9、$0036 bset 7,$0037 bset 7,$0037 bset 4,$0036 bset 4,$0036 rts rts* *-中断矢量中断矢量- - org $fffe org $fffe ; ;复位矢量复位矢量 dw dw maininitmaininit14延时子程序delaysub: ;延时0.1秒 pshh ;保据寄存器hx pshx delaysub1: ldhx #$ffff delaysub2: psha ;保护寄存器a lda #$ffdelaysub3: dbnza delaysub3 pula dbnzx delaysub2 dbnza delaysub1 pu
10、lx pulh rts15开关量输入输出开关量输入输出(io)实验实验 实验实验目的目的 实验器材实验器材 硬件接线硬件接线 程序功能程序功能 程序清单程序清单 备注说明备注说明a.3-0a.7-4-a.3-0 coma coma sta pta sta pta lda ptb lda ptb ; ;取开关取开关ptb0ptb0状态状态,0-,0-闭合闭合 and #%00000001 and #%00000001 ; ;剩下剩下ptb0ptb0位位 sta sta tmpvartmpvar ; ;放入变量放入变量tmpvartmpvar26 nopnop lda ptc lda ptc ;
11、;取开关取开关ptc0ptc0状态状态,0-,0-闭合闭合 and #%00000001 and #%00000001 ; ;剩下剩下ptc0ptc0位位 nopnop add add tmpvartmpvar ; ;经过此运算经过此运算 若若a=0,a=0,两个均闭合两个均闭合 ; ;若若=1,=1,有一个闭合有一个闭合;=2,;=2,均未闭合均未闭合 cbeqa #$0,light0 cbeqa #$0,light0 ; ;比较比较, ,相等转移相等转移, ,a=0a=0转向转向light0light027 nopnop cbeqa #$1,light1 cbeqa #$1,light1
12、;a=1;a=1转转light1light1 nop nop ;a=2,;a=2,两排均不亮两排均不亮 lda #$ff lda #$ff ; ;两排灯均不亮两排灯均不亮 1- 1-不亮不亮 sta ptbsta ptb sta ptc sta ptc bra io_end bra io_end ; ;转转io_end,io_end,延时延时28light0:light0: lda #$00 lda #$00 ; ;两排灯均亮两排灯均亮 0- 0-亮亮 sta ptbsta ptb sta ptc sta ptc bra io_end bra io_end ; ;无条件转无条件转io_endi
13、o_endlight1:light1: lda light_bc lda light_bc ; ;两排灯之一亮两排灯之一亮 0- 0-亮亮 sta ptb sta ptb ; ;驱动驱动b b口灯口灯 nega nega ; ;求补命令求补命令 sta ptc sta ptc ; ;驱动驱动b b口灯口灯 sta light_bc sta light_bc ; ;保存状态保存状态29io_end:io_end: lda #$fe lda #$fe ; ;延时延时delay1:delay1: ldx #$fc ldx #$fcdelay2:delay2: nop nop nop nop nop
14、nop dbnzx delay2 dbnzx delay2 dbnza delay1 dbnza delay1 bra start bra start ; ;无条件转开始处无条件转开始处* *-30* *-子程序子程序-* *init0: init0: ; ;系统初始化系统初始化init0init0子程序子程序 lda #%00000001 lda #%00000001 ; ;初始化初始化config2config2 sta $001e sta $001e lda #%00111101 lda #%00111101 ; ;初始化初始化config1config1 sta $001f sta $
15、001f clr $0036 clr $0036 ; ;初始化初始化ptclptcl mov #$01,$0036 mov #$01,$0036 mov #$01,$0038 mov #$01,$0038 mov #$2c,$0039 mov #$2c,$0039 mov #$80,$003a mov #$80,$003a 31 bset 5,$0036bset 5,$0036 bset 7,$0037 bset 7,$0037 bset 4,$0036 bset 4,$0036 rts rts* *-复位矢量复位矢量- - org $fffe org $fffe ; ;复位矢量复位矢量 dw
16、 dw maininitmaininit32备注说明: 仅仅作为基本教学例程作为基本教学例程33串行通信及串行通信及adad转换实验转换实验 实验目的实验目的 实验器材实验器材 硬件接线硬件接线vbvb界面界面 软件功能软件功能 程序清单程序清单 备注说明备注说明34实验目的实验目的:a/da/d转换,转换,单片机异步串行通信单片机异步串行通信 35实验器材实验器材: :1.sd-1型在线编程实验仪型在线编程实验仪2.导线若干导线若干36硬件接线硬件接线:vccptc3pta7pta6pta5pta4pta3pta2pta1pta0ptc0ptc1ptc2motorola gp32 mcu p
17、tc4ptb7ptb6ptb5ptb4ptb3ptb2ptb1ptb0vcc37vb界面:界面:38软件功能软件功能: 由由portbportb口的模拟量输入,通过单片机的口的模拟量输入,通过单片机的a/da/d转换器采集转换器采集8 8路数据,并放在路数据,并放在adbufadbuf开开始的地址中。始的地址中。 再在再在inbufinbuf中放开关量。中放开关量。 发发8686给给pcpc机作为握手信号,进行通信测机作为握手信号,进行通信测试,试,pcpc机判断后确认,发机判断后确认,发8686作为确认信作为确认信号,单片机收到号,单片机收到8686后,把模拟量后,把模拟量0-70-7和开和
18、开关量送关量送pcpc机显示。机显示。39程序清单:程序清单: 文件说明文件说明 口地址定义口地址定义 sci寄存器寄存器 a/d寄存器寄存器 数据区定义数据区定义 主程序主程序 a/d转换转换 串行通信输出串行通信输出 串行通信输入串行通信输入 从从pc机接收数据,机接收数据,并存储后送并存储后送pta输输出出 把在把在inbuf和和adbuff的数据送的数据送pc机输出机输出 中断矢量中断矢量40* *-文件说明文件说明-* * *文件名:文件名:sci.assci.as* *硬件连接:硬件连接:portaporta口输出它的口输出它的pta7-0pta7-0接接outout的的7-07-
19、0号号* *指示灯(指示灯(a0a0作为运行指示不受其它数据控制)作为运行指示不受其它数据控制)portbportb作为作为adad输入连接,输入连接,* *portbportb口为模拟量输入口口为模拟量输入口, ,portcportc的的c0-4c0-4接接inin的的5 5个拨位开关个拨位开关0-40-4作为开关作为开关* *输入串行口与微机串行口相接(输入串行口与微机串行口相接(96009600,n n,8 8,1 1)* *程序描述:程序描述:1.1.由由portbportb口的模拟量输入,通过单片机口的模拟量输入,通过单片机的的a/da/d转换器采集转换器采集8 8* *路数据,并放
20、在路数据,并放在adbufadbuf开始的地址中开始的地址中* * 2.2.再在再在inbufinbuf中放开关量中放开关量* * 3.3.发发8686给给pcpc机作为握手信号,进行通信测试机作为握手信号,进行通信测试, ,pcpc机判断后确机判断后确* * 认认, ,发发8686作为确认信号,单片机收到作为确认信号,单片机收到8686后后, ,把模拟量把模拟量 0-7 0-7和和* * 开关量送开关量送pcpc机显示机显示* *目的:目的:a/da/d转换,单片机异步串行通信转换,单片机异步串行通信 * *-* *41* *-口地址定义口地址定义-pta equ $0000 pta equ
21、 $0000 ;a;a口数据寄存器口数据寄存器ptb equ $0001 ptb equ $0001 ;b;b口数据寄存器口数据寄存器ptc equ $0002 ptc equ $0002 ;c;c口数据寄存器口数据寄存器ptd equ $0003 ptd equ $0003 ;d;d口数据寄存器口数据寄存器ddra equ $0004 ddra equ $0004 ;a;a口数据方向寄存器口数据方向寄存器ddrb equ $0005 ddrb equ $0005 ;b;b口数据方向寄存器口数据方向寄存器ddrc equ $0006 ddrc equ $0006 ;c;c口数据方向寄存器口数据
22、方向寄存器ddrd equ $0007 ddrd equ $0007 ;d;d口数据方向寄存器口数据方向寄存器ddre equ $0008 ddre equ $0008 ;e;e口数据寄存器口数据寄存器42* *-scisci寄存器寄存器-scs1 equ $0016 scs1 equ $0016 ;sci;sci状态寄存器状态寄存器1 1b-scte equ 7 b-scte equ 7 ; ;发送缓冲区空标志位发送缓冲区空标志位b-tc equ 6 b-tc equ 6 ; ;发送完成标志位发送完成标志位b-scrf equ 5 b-scrf equ 5 ; ;接收器满标志位接收器满标志位
23、scdr equ $0018 scdr equ $0018 ;sci;sci数据寄存器数据寄存器* *-a/da/d寄存器寄存器-adscr equ $003c adscr equ $003c ;a/d;a/d转换状态和控制寄存器转换状态和控制寄存器b-coco equ 7 b-coco equ 7 ; ;转换完成标志位转换完成标志位adr equ $003d adr equ $003d ;a/d;a/d转换数据寄存器转换数据寄存器adclk equ $003e adclk equ $003e ;a/d;a/d转换输入时钟寄存器转换输入时钟寄存器ramstartaddrramstartaddr
24、 equequ $0040 $0040 ;ram ;ram的起始地址(因芯片不同可以更改)的起始地址(因芯片不同可以更改)flashstartaddrflashstartaddr equequ $8000 $8000 ; ;程序开始地址(因芯片不同可以更改)程序开始地址(因芯片不同可以更改)43* *-数据区定义(变量定义)数据区定义(变量定义)- - org org ramstartaddrramstartaddr ;ram ;ram的起始地址的起始地址inbuf rmb 1 inbuf rmb 1 ;1;1字节存放字节存放5 5位开关量位开关量adbuf rmb 8 adbuf rmb 8
25、 ;8;8字节存放字节存放8 8路路a/da/d转换结果转换结果onoff rmb 1 onoff rmb 1 ;1;1字节存放从字节存放从pcpc的数据的数据 tmpvar rmb 1 tmpvar rmb 1 ; ;暂存使用暂存使用44* *-主程序主程序- - org org flashstartaddrflashstartaddr ; ;程序起始地址程序起始地址maininitmaininit: nop nop lda #$3e lda #$3e ;a/d;a/d初始化初始化2 2分频、使用内部总线时钟分频、使用内部总线时钟 sta adclksta adclk lda #$ff ld
26、a #$ff ; ;定义定义portaporta输出输出 sta ddrasta ddra lda #$00 lda #$00 sta pta sta pta sta onoff sta onoff ;onoff=0;onoff=0 lda #$00 lda #$00 ; ;定义定义portbportb,portcportc作为输入作为输入 sta ddrbsta ddrb sta ddrc sta ddrc45* *-a/da/d转换转换-main: main: nop nop ; ;循环获得循环获得8 8路路adad值值 ldhx #$0 ldhx #$0 ;h;h:x=0x=0ga-re
27、peat:ga-repeat: txa txa ;x;x寄存器送到累加器寄存器送到累加器 sta adscr sta adscr ; ;选定一路选定一路a/da/d,启动转换启动转换 brclr 7,adscr,brclr 7,adscr,* * ; ;等待等待a/da/d转换完成转换完成 lda adr lda adr ;a/d;a/d转换结果给转换结果给a a sta adbuf,x sta adbuf,x ;a;a给给 adbuf+xadbuf+x,储存数据储存数据 aix #1 aix #1 ; ;下一存储单元下一存储单元 cpx #$08 cpx #$08 ; ;判断判断8 8路转换
28、是否完成路转换是否完成 bne ga-repeat bne ga-repeat ; ;循环循环8 8次转换次转换8 8个通道模拟量个通道模拟量46* *-串行通信输出串行通信输出-get-in:get-in: lda ptc lda ptc ;5;5位开关量采集位开关量采集 sta inbuf sta inbuf ; ;暂放暂放inbufinbuf nop nop lda #$56 lda #$56 ; ;把把8686(1616进制数进制数5656)为握)为握 ; ;手信号送手信号送出到出到pcpc中中 brclr 7,scs1,brclr 7,scs1,* * ; ;等待以前数据全部发出,等
29、待以前数据全部发出, ; ;sctescte置置1 1,发送缓冲区空,发送缓冲区空 sta scdr sta scdr ; ;发送缓冲区空时,发送缓冲区空时, ; ;可向可向scisci数据寄存器送数数据寄存器送数 47* *-串行通信输入串行通信输入- nopnop ldhx #0 ldhx #0ws-repe1:ws-repe1: brset 5,scs1,ws-rece1 brset 5,scs1,ws-rece1 ; ;测试测试scrfscrf位,位, ; ;判断接收缓冲器是否满判断接收缓冲器是否满 nopnop nop nop aix #1 aix #1 ; ;延时等待延时等待 cp
30、hx #$ffffcphx #$ffff bne ws-repe1 bne ws-repe1 bra disp1 bra disp1 ; ;超时退出超时退出ws-rece1:ws-rece1: lda scdr lda scdr ; ;读取收到的数据读取收到的数据 48 cmp #$56 cmp #$56 ; ;判断是否为确认信号判断是否为确认信号8686 bne disp1 bne disp1 ; ;不是退出,是就开始通信不是退出,是就开始通信 nopnop ldhx #0 ldhx #0ws-repe2:ws-repe2: brset 5,scs1,ws-rece2 brset 5,scs
31、1,ws-rece2 ; ;测试测试scrfscrf位,位, ; ;判断接收缓冲器是否满判断接收缓冲器是否满 nopnop nop nop aix #1 aix #1 ; ;延时等待延时等待 cphx #$6688cphx #$6688 bne ws-repe2 bne ws-repe2 ; ;超时退出超时退出 bra disp1bra disp149* *-从从pcpc机接收数据,并储存后送机接收数据,并储存后送ptapta输出输出-* *-(a.0a.0不受影响)不受影响)-ws-rece2ws-rece2 lda scdr lda scdr nop nop and #$fe and #$
32、fe ;a0=0;a0=0 sta tmpvar sta tmpvar ; ;暂时缓存暂时缓存 lda onofflda onoff and #$1 and #$1 ; ;留下留下a.0a.0 ora tmpvar ora tmpvar ; ;处理接收的数据,放在处理接收的数据,放在a a中中 sta onoff sta onoff ; ;储存接收数据在储存接收数据在onoffonoff中中 nop nop ; ;送送a/da/d值值50* *-把在把在inbufinbuf和和adbuffadbuff的数据送的数据送pcpc机输出机输出- ldhx #$0ldhx #$0sa-repeat:s
33、a-repeat: lda inbuf,x lda inbuf,x brclr 7,scs1, brclr 7,scs1,* * ;scte;scte置置1 1, ; ;发送缓冲区空发送缓冲区空 sta scdr sta scdr ;a;a给给scdrscdr,发送出去发送出去 aix #1aix #1 cpx #$09 cpx #$09 ;9;9个数据输出个数据输出 bne sa-repeatbne sa-repeat51disp1:disp1: nop nop lda onoff lda onoff eor #$1 eor #$1 ; ;把原把原a.0a.0取反,使灯闪烁取反,使灯闪烁 s
34、ta onoffsta onoff sta pta sta pta bra main bra main* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *-中断矢量中断矢量- - org $fffe org $fffe ; ;复位矢量复位矢量 dw dw maininitmaininit: :52备注说明备注说明: 单片机与单片机与pcpc机使用串行异机使用串行异步通信。在此程序下,通过步通信。在此程序下,通过pcpc机下的机下的vb6.0vb6.0控制程序
35、构成一定控制程序构成一定功能的微机控制系统。功能的微机控制系统。53键盘编程实验键盘编程实验 实验目的实验目的 实验器材实验器材 硬件接线硬件接线 软件功能软件功能 程序清单程序清单 备注说明备注说明54实验目的实验目的:键盘查询,键盘中断,键盘查询,键盘中断,键值识别,键盘编码键值识别,键盘编码. .55实验器材实验器材: :1.sd-1型在线编程实验板型在线编程实验板2.导线若干导线若干56硬件接线硬件接线: :红线为学生接线红线为学生接线ptc3pta7pta6pta5pta4pta3pta2pta1pta0ptc0ptc1ptc2motorola gp32 mcuptc4内置电阻内置电
36、阻vcc57 2 de 键键值表值表: : 1 ee 3 be 4 7e 5 ed 6 dd 7 dd 8 7d 9 eb 0 db a bb b 7b c e7 d d7 e b7 f 77键值键值定义定义58软件功能软件功能: : 开始运行时,指示灯开始运行时,指示灯7 7亮,等待键盘按键。亮,等待键盘按键。 按下按下“d”d”键进入运行状态,指示灯键进入运行状态,指示灯7 7闪闪烁。烁。 在指示灯在指示灯7 7闪烁状态,按闪烁状态,按“0-9”“0-9”任意一任意一键,指示灯键,指示灯3-03-0显示对应的二进制值(显示对应的二进制值(0 0为灯亮,为灯亮,1 1为灯暗,如为灯暗,如1
37、1的二进制为的二进制为00010001,显示应为显示应为“亮亮亮暗亮亮亮暗”),按),按“a-f”a-f”任任意一键,指示灯意一键,指示灯3-03-0全暗。全暗。59程序清单程序清单: : 程序说明程序说明 口地址定义口地址定义 数据区定义数据区定义 主程序主程序 键盘中断初始化键盘中断初始化子程序子程序 扫描读键值子程序扫描读键值子程序 键盘中断子程序键盘中断子程序 键盘转化为具体值键盘转化为具体值子程序子程序 延时程序子程序延时程序子程序 中断矢量中断矢量60* *-程序说明程序说明-* * *文件名:文件名:key.asmkey.asm* *使用使用4 4* *4 4键盘实现输入控制键盘
38、实现输入控制* *硬件连接:硬件连接:* * pta7-4pta7-4接接4 4根键盘列线(根键盘列线(x4-1x4-1),),pta3-0pta3-0接接4 4根键盘行线根键盘行线* * (y4-1y4-1)* * ptc4 ptc4接指示灯接指示灯7 7(out7out7),),ptc3-0ptc3-0分别接指示灯分别接指示灯3-03-0(out3-0out3-0)* *程序描述:程序描述:1.1.开始运行时,指示灯开始运行时,指示灯7 7亮,等待键盘按键亮,等待键盘按键* * 2. 2.按下按下“d”d”键进入运行状态,指示灯键进入运行状态,指示灯7 7闪烁闪烁* * 3. 3.在指示灯
39、在指示灯7 7闪烁状态,按闪烁状态,按“0-9”“0-9”任意一键,指示灯任意一键,指示灯3-03-0* *显示对应的二进制值(显示对应的二进制值(0 0为灯亮,为灯亮,1 1为灯暗,如为灯暗,如1 1的二进制为的二进制为00010001* *显示应为显示应为“亮亮亮暗亮亮亮暗”),按),按“a-f”a-f”任意一键,指示灯任意一键,指示灯3-03-0全暗。全暗。* *目的:键盘查询,键盘中断,键值识别,键盘编码目的:键盘查询,键盘中断,键值识别,键盘编码* *-* *61*-口地址定义口地址定义-ddra equ $0004 ;a;a口数据方向寄存器口数据方向寄存器pta equ $0000
40、 ;a;a口数据寄存器口数据寄存器ptapue equ $000d ;a;a口上拉电阻允许寄存器口上拉电阻允许寄存器ddrc equ $0006 ;c;c口数据方向寄存器口数据方向寄存器ptc equ $0002 ;c;c口数据寄存器口数据寄存器intkbscr equ $001a ; ;键盘状态和控制寄存器键盘状态和控制寄存器intkbier equ $001b ; ;键盘中断允许寄存器键盘中断允许寄存器62* *-数据区定义(变量定义)数据区定义(变量定义)- org $0090org $0090tmpvar1 rmb 1 tmpvar1 rmb 1 ; ;变量变量tmpvar1tmpva
41、r1,缓冲使用缓冲使用tmpvar2 rmb 1 tmpvar2 rmb 1 ; ;变量变量tmpvar2tmpvar2,缓冲使用缓冲使用kbvalue rmb 1 kbvalue rmb 1 ; ;存放键盘按键值存放键盘按键值ptcstate rmb 1 ptcstate rmb 1 ;ptc;ptc口状态变量口状态变量ramstartaddrramstartaddr equequ $0040 $0040 ;ram ;ram的起始地址(因芯片不同可以更改)的起始地址(因芯片不同可以更改)flashstartaddrflashstartaddr equequ $8000 $8000 ; ;程序
42、开始地址程序开始地址(因芯片不同可以更改)(因芯片不同可以更改)* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *63 org org flashstartaddrflashstartaddr ; ;程序起始地址程序起始地址* *-主程序主程序-maininitmaininit: : nop nop lda #$00 lda #$00 ; ;定义定义c c口之前复位口之前复位ptcptc sta ptc sta ptc lda #%00011111 lda #%0
43、0011111 ; ;定义定义c c口口4-04-0为输出为输出 sta ddrc sta ddrc ;c;c口接指示灯口接指示灯 sta ptc sta ptc ; ;初始时指示灯熄灭初始时指示灯熄灭 bclr 4,ptc bclr 4,ptc ;ptc4;ptc4为为0 0,指示灯,指示灯7 7点亮点亮 ; ;表示进入开始状态表示进入开始状态64;-;-a a口接键盘,查询等待按键口接键盘,查询等待按键- - lda #$00 lda #$00 ; ;定义定义a a口前复位口前复位ptapta sta pta sta pta lda #%00001111 lda #%00001111 st
44、a ddra sta ddra lda #%11110000 lda #%11110000 sta ptapue sta ptapue65mainini1:mainini1: jsr kba jsr kba ; ;取得键值在取得键值在a a中中 sta kbvalue sta kbvalue ; ;键值放在键值放在kbvaluekbvalue中中 ; ;作为作为kbdefkbdef的入口的入口 jsr jsr kbdefkbdef ; ;具体值具体值在在a a中中 cmpcmp #$46 #$46 ;ascii;ascii(“f”“f”)是否为是否为$46$46 bne mainini1 bn
45、e mainini1 ; ;不是等待不是等待“f”f”键键;-;-设置键盘中断设置键盘中断-jsr jsr kbinitkbinit ; ;已按已按“f”f”键,进入运行状态,键,进入运行状态, ; ;执行键盘中断初始化子程序执行键盘中断初始化子程序 bclr 1,intkbscr bclr 1,intkbscr ; ;开放键盘中断开放键盘中断 clicli66 ; ;-开始总循环处理键盘开始总循环处理键盘-start:start: nop nop; ;-使灯闪烁使灯闪烁- bclr 4,ptc bclr 4,ptc ;pta4=0;pta4=0,电亮指示灯电亮指示灯7 7 lda #$08l
46、da #$08 jsr jsr delaysubdelaysub bset 4,ptc bset 4,ptc ;pta4=1;pta4=1,熄灭指示灯熄灭指示灯7 7 lda #$08lda #$08 jsr jsr delaysubdelaysub 67 jsr jsr kbdekbde ; ;执行键盘转化为具体值子程序,执行键盘转化为具体值子程序, ; ;转成键定义值转成键定义值 cmp #$39 cmp #$39 ; ;测试是否是测试是否是0-90-9 bhi start1 bhi start1 ; ;大于大于asciiascii(“9”“9”)到到start1start1 sub #$
47、30 sub #$30 ; ;数字实际值数字实际值= =asciiascii值值-$30-$30 sta ptc sta ptc ; ;送送ptcptc口口, ,由指示灯由指示灯3-03-0显示显示 bra startbra startstart1:start1: lda #$ff lda #$ff ; ;大于大于asciiascii(“9”“9”), ,消灭指示灯消灭指示灯 sta ptcsta ptc jmp start jmp start ; ;继续循环处理继续循环处理68* *- -键盘中断初始化子程序(从键盘中断初始化子程序(从kbinitkbinit开始)开始)-* *功能:对被定
48、义为键盘中断的引脚初始化,但未开放键盘中断功能:对被定义为键盘中断的引脚初始化,但未开放键盘中断* *占用占用cpucpu内寄存器内寄存器:a a* *-kbinitkbinit: : lda #$00 lda #$00 ; ;定义定义a a口之前复位口之前复位ptapta sta pta sta pta lda #%00001111 lda #%00001111 ; ;定义定义a a口口7-47-4输入作为列,输入作为列, ;3-0 ;3-0输出作为行输出作为行 sta ddrasta ddra lda #%11110000 lda #%11110000 ; ;定义定义a a口口7-47-4
49、有上拉电阻有上拉电阻 sta ptapuesta ptapue bset 1,intkbscr bset 1,intkbscr ; ;屏蔽键盘中断屏蔽键盘中断 lda #%11110000 lda #%11110000 ; ;允许允许kbie7-4pinkbie7-4pin中断进入中断进入 sta intkbiersta intkbier bset 2,intkbscr bset 2,intkbscr ; ;清除键盘中断清除键盘中断 rtsrts69* *-扫描读键值子程序(从扫描读键值子程序(从kbakba开始)开始)-* *功能功能: :扫描一次接在扫描一次接在ptapta口的口的4 4*
50、 *4 4键盘(键盘(pta7-4pta7-4接接4 4根键盘根键盘* *(x4-1x4-1),),pta3-0pta3-0接接4 4根键盘行线(根键盘行线(y4-1y4-1)上的按键(使上的按键(使* *用行扫描法),键值放在用行扫描法),键值放在a a中中, ,若无按键若无按键,a a中值中值$ $ffff* *占用内存:占用内存:tmpvar1tmpvar1(缓冲使用)缓冲使用)* *出口:出口:a=a=键值键值* *-kba:kba: mov #%11111110,tmpvar1 mov #%11111110,tmpvar1 ; ;第一根行线为第一根行线为0 0 ldx #$04 ld
51、x #$04 ; ;扫描扫描4 4根行线根行线kb1:kb1: lda pta lda pta ; ;取取ptapta给给a a ora #%00001111 ora #%00001111 ;pta7-4;pta7-4保留原态,保留原态,pta3-0pta3-0为为1 1 and tmpvar1 and tmpvar1 ; ;令令ptanptan=0=0,n=0n=0,1 1,2 2,3 3 sta pta sta pta ; ;处理后给处理后给ptapta以便查询以便查询70 nopnop nop nop lda pta lda pta ; ;查第查第n n列上是否有键按下列上是否有键按下
52、and #%11110000 and #%11110000 ; ;保留保留pta7-4pta7-4列值,令低列值,令低pta3-0=0pta3-0=0 cbeqa #$f0,kb2 cbeqa #$f0,kb2 ;a;a等于等于$ $f0f0,本行线没键按下本行线没键按下 ; ;a a不等于不等于$ $f0,f0,本行有键按下本行有键按下 lda pta lda pta ;a;a放键值放键值 bra kb3 bra kb3 ; ;转到转到kb3kb3结束中断结束中断kb2:kb2: sec sec ; ;令令c=1c=1 rol tmpvar1 rol tmpvar1 ; ;使下一个行线为使下
53、一个行线为0 0,查下一行,查下一行 dbnzx kb1 dbnzx kb1 ; ;对行线循环对行线循环 lda #$ff lda #$ff ; ;没有键被按下为没有键被按下为$ $ffffkb3:rtskb3:rts71* *-键盘中断子程序(从键盘中断子程序(从kbintkbint开始)开始)-* *功能:键盘中断程序,键值放入内存功能:键盘中断程序,键值放入内存kbvaluekbvalue中中* *调用子程序:扫描法读键值子程序(调用子程序:扫描法读键值子程序(kbakba),),* * 键盘中断初始化子程序(键盘中断初始化子程序(kbinitkbinit)* *出口:第出口:第0 0页
54、内存单元页内存单元kbvaluekbvalue中为键值中为键值* *-bintbint: : pshh pshh ; ;保护保护h h sei sei bset 1,intkbscr bset 1,intkbscr ; ;禁止键盘中断禁止键盘中断;-;-以下为中断程序任务以下为中断程序任务- - jsr kba jsr kba ; ;调子程序调子程序kbakba,键值放在键值放在a a中中 sta kbvalue sta kbvalue ; ;放入内存放入内存kbvaluekbvalue;-;-以上为中断程序任务以上为中断程序任务- - 72 pulh pulh ;h;h出栈出栈 jsr js
55、r kbinitkbinit ; ;调用键盘中断初始化子程序调用键盘中断初始化子程序 bclr 1,intkbscrbclr 1,intkbscr ; ;开放键盘中断开放键盘中断 clicli rti rti* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *-键盘转化为具体值子程序(从键盘转化为具体值子程序(从kbdefkbdef开始开始)-* *功能:键值转为键盘表面具体的字符或符号代表值功能:键值转为键盘表面具体的字符或符号代表
56、值* *入口:内存第入口:内存第0 0页页中中kbvaluekbvalue为键值,使用键值编号表为键值,使用键值编号表* *占用占用cpucpu寄存器:寄存器:x x(存放相对地址)存放相对地址)* *出口:出口:a=a=键定义值键定义值* *-kbdefkbdef: : ldhx #$0000 ldhx #$0000 73kbkey1:kbkey1: lda kbtable,x lda kbtable,x beq kbkey3 beq kbkey3 ;=0;=0,表示表中未定义此键值表示表中未定义此键值 cmp kbvalue cmp kbvalue ; ;与与kbvaluekbvalue入
57、口键值相比较入口键值相比较 bne kbkey2 bne kbkey2 ; ;不等,未找到转不等,未找到转kbkey2kbkey2 incx incx ; ;找到地址加找到地址加1 1 lda kbtable,x lda kbtable,x ; ;取键定义值给取键定义值给a a bra bra kbkeyrkbkeyrkbkey2:kbkey2: incx incx incx incx bra kbkey1 bra kbkey174kbkey3:kbkey3: lda #$ff lda #$ff ; ;未定义键用未定义键用ffff标志标志kbkeyrkbkeyr: rts: rtskbtabl
58、e fcb $ee,1,$de,2,$be,3,$7e,4kbtable fcb $ee,1,$de,2,$be,3,$7e,4 fcb $ed,5,$dd,6,$bd,7,$7d,8 fcb $ed,5,$dd,6,$bd,7,$7d,8 fcb $eb,9,$db,0,$bb,a,$7b,b fcb $eb,9,$db,0,$bb,a,$7b,b fcb $e7,c,$d7,d,$b7,e,$77,f fcb $e7,c,$d7,d,$b7,e,$77,f fcb $00 fcb $00* * * * * * * * * * * * * * * * * * * * * * * * * *
59、* * * * * * * * * * * * * * * * * * * * * *75* *-程序延时程序子程序(程序延时程序子程序(delaysubdelaysub)-* *功能功能: :程序方法延时,延时长短由入口程序方法延时,延时长短由入口a a中的数值决定中的数值决定* *入口:入口:a=a=延时长度延时长度* *占用内存占用内存: :无无* *占用寄存器占用寄存器: :a a* *-delaysubdelaysub: : pshh pshh pshx pshx delay1:delay1: ldhx #$5588 ldhx #$558876delay2:delay2: nop n
60、op aix #-1 aix #-1 cphx #$0000 cphx #$0000 bne delay2 bne delay2 dbnza delay1 dbnza delay1 pulx pulx pulh pulh rts rts* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *-中断矢量中断矢量- org $ffe0 org $ffe0 ; ;键盘中断矢量键盘中断矢量 dw dw kbintkbint org $fffe org $fffe ; ;复位矢量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论