版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第 62 页第五章 em78系列单片机程序设计5.1.em78 系列八位微控器特色指令用法5.1.1.查表指令与用法em78 系列八位微控器是利用 (1) call,(2) 改变 pc ( 或“ tbl),(3) retl k 三个步骤来查表的。其中“retl k 是将常数 k 的值传至工作寄存器 a 中。步骤 (2) 中若利用“ mov 0 x2,a ,或“ add 0 x2,a 等等指令来改变pc ,则因为此等指令会將 pc (r2) 的位 8 、9 清除 ( 在 em78056 只清除位 8) ,所以查表的内容只能放在程序每个 page 的較低的 256 个位址。步骤 (2) 中若
2、利用“ tbl 指令来改变pc ,则因为此指令不会將pc (r2) 的位 8 、9 清除,而保留“tbl 所在位址的位 8 、9,所以查表的内容可以放在程序每个 page 中的任何位址。例: 查表table add 0 x02,a ;將相对位置加入 pc 而改变了pc retl 0 x19 ;传回常数内容 19h 至 a retl 0 x74 ;传回常数内容 74h 至 a retl 0 x2e ;传回常数内容 2eh 至 a retl 0 x54 ;传回常数内容 54h 至 a retl 0 x4b ;传回常数内容 4bh 至 a inc 0 x18 mov a,0 x18 ;欲查的内容的相
3、对位置放在a call table ;查表mov 0 x10,a ;查表得到的内容移至 r10 中5.1.2.分 page 的用法1. 程序跳 page 的用法 : em78 系列八位微控器將其 program memory (rom) 分成数个 page ,每个 page 的长度是 1k (em78056 除外 ) 。r3 寄存器的位 5 (6) 是 page 选择位 ,当执行 jmp 或 call 指令时, page 选择位 会被载入 program counter 的位 10 (11),因此当程序超过 1k (em78056 为 0.5k) 时,执行 jmp 或call 指令时, pag
4、e 选择位 正确的设定是非常重要的。下面将以 em78256 为例来说明跳 page 的方法。例例:从 page 1 跳转到 page 0 ; page 0, begin at 000h 049 add 0 x11,a 050 mov a,0 x55 051 mov 0 x05,a ;port5- 0 x55 052 bs 0 x03,5 ;select page 1 053 jmp lab1 ;page jump 第五章第 63 页054 ; page 1, begin at 400h 447 448 mov a,0 x3f 449 xor 0 x12,a 450 lab1 bc 0 x06
5、,3 451 mov a,0 x05 说明 : 052: 将 r3 寄存器的位 5 设为 1 (选择 page 1) 。053: lab1 会被编译为 50 ,程序跳转至 page 1 中 lab1 (450) 的位址。注意 : 此例中 052 和 053 是用来跳 page 的,假如沒有 052 这行指令,则程序将跳转至 050 的位址 ( 在 page 0 中) ,如此將沒有达到預期的目的。2. 不同 page 子程序呼叫的方法: 如第 1 项所述,当程序超过 1k 時,执行 call 指令时, page 选择位 的设定就必须加以考虑。下面將以 em78256 为例来说明呼叫不同 page
6、 子程序的方法。例: 从 page 0调用 page 1中的子程序; page 0, begin at 000h 049 add 0 x11,a 050 mov a,0 x55 051 mov 0 x05,a ;port5 f(0) jbc r3,0 ;skpnc bs rxbuf,0 call bitin jbc eeprom,di bs rxbuf,0 ; input bit =1 djz count ; 8 bits? jmp rxlp bs eeprom,do ; set acknowledge bit = 1 call bitout ; to stop further input r
7、et ;- ; 发送数据子程序; input : txbuf ; output : data xmitted to eeprom device 第五章第 90 页;- tx mov a,8 mov count,a txlp bc eeprom,do ; shift data bit out. jbc txbuf,7 ; if shifted bit = 0, data bit = 0 bs eeprom,do ; otherwise data bit = 1 call bitout ; serial data out rlc txbuf ; rotate txbuf left jbs r3,0
8、 ; f(6) - f(7) bc txbuf,0 ; f(7) - carry jbc r3,0 ; carry - f(0) bs txbuf,0 djz count ; 8 bits done? jmp txlp ; no. call bitin ; read acknowledge bit mov a,3 jbc eeprom,di ; check for acknowledgement call err ; no acknowledge from device ret ;- ; 字节写,写一个字节到eeprom 器件; input : datao= data to be writte
9、n ; addr = destination address ; slave = device address (1010 xxx0) ; output : data written to eeprom device ;- wrbyte movf a,slave ; get slave address mov txbuf,a ; to tx buffer call bstart ; generate start bit call tx ; output slave address mov a,addr ; get word address mov txbuf,a ; into buffer c
10、all tx ; output word address mov a,datao ; move data mov txbuf,a ; into buffer call tx ; output data and detect acknowledgement call bstop ; generate stop bit jmp wrt_end ;- ; 字节读,从eeprom 器件读一个字节; input : addr = source address ; slave = device address (1010 xxx0) ; output : datai = data read from se
11、rial eeprom 第五章第 91 页;- rdbyte mov a,slave ; move slave address mov txbuf,a ; into buffer (r/w = 0) call bstart ; generate start bit call tx ; output slave address. check ack. mov a,addr ; get word address mov txbuf,a call tx ; output word address. check ack. call bstart ; start read (if only one de
12、vice is movf a,slave ; connected to the i2c bus) mov txbuf,a bs txbuf,0 ; specify read mode (r/w = 1) call tx ; output slave address call rx ; read in data and acknowledge call bstop ; generate stop bit mov a,rxbuf ; save data from buffer mov datai,a ; to datai file. jmp rd_end ; 随机读写测试, 主程序start: m
13、ov a,0xae ;set a2=a1=a0=1 mov slave,a ; / mov a,2 ;set r/w loc. = 2 mov addr,a ; / mov a,55 ;write 55 to seeprom mov datao,a ; / jmp wrbyte ;write a byte wrt_end :call delay ;wait for write operation (internal) jmp rdbyte ;read back data rd_end mov a,55 ;test if read xor a,datai ;correct? jbs stat,z
14、 ;yes then skip wrong jmp wrong correct jmp correct ;at 2.0mhz, delay = approx. 3ms. delay : clr 0x1f ;clear last location dly1 :nop nop nop djz 0x1f ;reduce count jmp dly1 ;loop ret end 第五章第 92 页5.3.7.串行实时时钟芯片的接口ht1380串行实时时钟芯片具有接口简单、功耗低、工作电压范围宽、计时精确、功能全(可对分、秒、时、日、日期、月及带闰年补偿的年进行计数)、成本低等优点,因此在实际应用中被广
15、泛采用,下面先简单介绍一下该芯片的情况,然后实际工作中采用的子程序供读者参考。ht1380是一种串行实行时时钟芯片, 它提供秒、分、时、日、日期、月和年的信息。对于小于 31 天的月的月末日期能自动进行调整,还包括闰年校正功能。低功耗设计且时钟的运行可以采用24 小时格式或带am/pm指示的 12 小时的格式。 ht1380含有若干寄存器用以存储相应信息。 采用外部 32.768khz 晶振以提供正确定时。最少引脚数的串行i/0通信方式。与微处理器通信仅需三根线:1.yrst(复位 )2.ysclk( 串行时钟 )3.yio( 数据线 ). 数据传送采用两种模式 , 即单字节模式和多字节模式(
16、 至多为8 个字节 , 每一数据传送由命令字节初始化,命令字节如下所示,最高位msb (位 7)必须置1;最低位lsb (位 0)置 1/0 ,表示为写/ 读周期;位3-1 指定所需访问的寄存器。1引脚排列2引脚说明x1 ,x2:32.768khz 晶体振荡器引脚vss:地yrst :串行通信复位引脚yio :串行通信数据输入/输出引脚ysclk :串行通信的串行时钟脉冲引脚vdd :电源3命令字节每一数据传送由命令字节初始化。命令字节如下所示,最高位msb (位 7)必须置1;最低位 lsb(位 0)置 i/o,表示为写 /读周期;位31 指定所需访问的寄存器。下表显示寄存器地址和它的数据格
17、式:pegister address a2a0 function command address (hex) write=w read=r range data (bcd) register definition 7 6 5 4 3 2 1 0 0 seconds 80 81 w r 0059 ch 10sec sec 1 minutes 82 83 w r 0059 0 10min min 2 12hrs 24hrs 84 85 w r 0112 0023 12 24 0 0 ap 10 hr hr hour 3 date 86 87 w r 0131 0 0 10date date 4 m
18、onth 88 89 w r 0112 0 0 0 10m month 5 day 8a 8b w r 0107 0 0 0 0 day 6 year 8c 8d w r 0009 10year year 7 write protect 8e 8f w r 0080 wp always zero 注: *ch : 时钟暂停标志*寄存器 2 的位 7:12/24 模式标志第五章第 93 页ch=0 允许振荡器工作位 7=1:12 小时模式ch=1 时钟振荡器停止位 7=1:24 小时模式*wp:写保护位*寄存器 2 的位 5:am/pm 模式设置wp=0 允许写人数据ap=1 pm 模式wp=1
19、 禁止写人数据ap=0 am 模式4. 图 5.11 为单字节及多字节模式传送时隙单字节传送图 5.11 单字节及多字节模式传送时隙多字节传送第五章第 94 页5. 应用框图图 5.12 系统应用框图及流程图y n 6.实际例程清单:ht1380 equ 0x06 count0 equ 0x10 txbuf equ 0x1 1 rxbuf equ 0x12 databuf equ 0x13 addrpoint equ 0x14 ht_sda_in equ 0b01001000 hd_sda_out equ 0b00001000 ht_scl equ 0 ht_rst equ 1 ht_sda
20、equ 2 ; tx_1380: mov a,ht_sda_out iow ht1380 bc ht1380,ht_scl mov a,8 mov count0,a tx_1380_lp: bc ht1380,ht_sda jbc txbuf ,0 bs ht1380,ht_sda bs ht1380,ht_scl rrc txbuf bc ht1380,ht_scl djz count0 jmp tx_1380_lp ret ;读ht1380 子程序read_ht : mov txbuf ,a bc ht1380,ht_scl bs ht1380,ht_rst mov a,ht_sda_ou
21、t iow ht1380 mov a,8 mov count0,a 开 始打开写保护和振荡器工作设置 rst 引脚从低到高输入命令字从 0 开始读或写相应寄存数据从 0 位开始复位 rst 引脚从高到低下一个寄存器规定与否结 束多字节传送第五章第 95 页tx_1_lp: bc ht1380,ht_sda jbc txbuf ,0 bs ht1380,ht_sda bs ht1380,ht_scl rrc txbuf bc ht1380,ht_scl djz count0 jmp tx_1_lp mov a,ht_sda_in iow ht1380 mov a,8 mov count0,a r
22、x_1380_lp: rrc rxbuf bc rxbuf ,7 jbc ht1380,ht_sda bs rxbuf ,7 bs ht1380,ht_scl bc ht1380,ht_scl djz count0 jmp rx_1380_lp bc ht1380,ht_rst ret ;写ht1380 子程序write_ht : mov addrpoint ,a bc ht1380,ht_scl bs ht1380,ht_rst mov a,0b1000110 mov txbuf ,a call tx_1380 clr txbuf call tx_1380 bc ht1380,ht_rst
23、nop bs ht1380,ht_rst mov a,addrpoint mov txbuf ,a call tx_1380 mov a,dat abuf mov txbuf ,a call tx_1380 bc ht1380,ht_rst nop bs ht1380,ht_rst mov a,0b10001110 mov txbuf ,a call tx_1380 mov a,0b10000000 mov txbuf ,a call tx_1380 bc ht1380,ht_rst mov a,ht_sda_in iow ht1380 ret end 5.3.8.hd7279串行接口 8 位
24、 led数码管及 64 键键盘智能控制芯片hd7279(a) 是一片具有串行接口的,可同时驱动8位共阴式数码管(或 64 只独立led) 的智能显示驱动芯片,该芯片同时还可连接多达64 键的键盘矩阵。hd7279 内部含有译码器,可直接接受16 进制码,hd7279a还同时具有2 种译码方式, hd7279(a) 还具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。特点:串行接口各位独立控制译码/ 不译码及消隐和闪烁属性( 循环 ) 左移 /( 循环 ) 右移指令具有段寻址指令,方便控制独立led 64 键键盘控制器,内含去抖动电路图 5.13 第五章第 96 页控制指令hd7279的控制
25、指令分为二大类 纯指令和带有数据的指令。纯指令1、复位 ( 清除 ) 指令d7d6d5d4d3d2d1d01 0 1 0 0 1 0 0 当 hd7279收到该指令后,将所有的显示清除,所有设置的字符消隐、闪烁等属性也被一起清除。执行该指令后,芯片所处的状态与系统上电后所处的状态一样。2、测试指令d7d6d5d4d3d2d1d01 0 1 1 1 1 1 1 该指令使所有的led全部点亮,并处于闪烁状态,主要用于测试。3、左移指令d7d6d5d4d3d2d1d01 0 1 0 0 0 0 1 使所有的显示自右向左( 从第 1 位向第 8 位) 移动一位 ( 包括处于消隐状态的显示位) ,但对各
26、位所设置的消隐及闪烁属性不变。移动后,最右边一位为空( 无显示 ) 。例如,原显示为4 2 5 2 l p 3 9 其中第 2 位 3和第 4 位 l为闪烁显示,执行了左移指令后,显示变为2 5 2 l p 3 9 第二位 9和第四位p为闪烁显示。4、右移指令d7d6d5d4d3d2d1d01 0 1 0 0 0 0 0 与左移指令类似,但所做移动为自左向右( 从第 8 位向第 1位 ) 移动,移动后,最左边一位为空。5、循环左移指令d7d6d5d4d3d2d1d01 0 1 0 0 0 1 1 与左移指令类似, 不同之处在于移动后原最左边一位( 第 8 位) 的内容显示于最右位( 第 1位)
27、 。在上例中,执行完循环左移指令后的显示为2 5 2 l p 3 9 4 第二位 9和第四位p为闪烁显示。6、循环右移指令d7d6d5d4d3d2d1d01 0 1 0 0 0 1 0 与循环左移指令类似,但移动方向相反。带有数据的指令第五章第 97 页1、下载数据且按方式0 译码d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d01 0 0 0 0 a2a1a0dp x x x d3d2d1d0x=无影响命令由二个字节组成,前半部分为指令,其中a2,a1,a0为位地址,具体分配如下:a2a1a0显示位0 0 0 1 0 0 1 2 0 1 0 3 0 1 1 4 1 0 0 5
28、1 0 1 6 1 1 0 7 1 1 1 8 d0d3为数据,收到此指令时,hd7279(a)按以下规则 ( 译码方式0) 进行译码,如下表:十六进制d3d2d1d07 段显示00h 0 0 0 0 0 01h 0 0 0 1 1 02h 0 0 1 0 2 03h 0 0 1 1 3 04h 0 1 0 0 4 05h 0 1 0 1 5 06h 0 1 1 0 6 07h 0 1 1 1 7 08h 1 0 0 0 8 09h 1 0 0 1 9 0ah 1 0 1 0 - 0bh 1 0 1 1 e 0ch 1 1 0 0 h 0dh 1 1 0 1 l 0eh 1 1 1 0 p 0
29、fh 1 1 1 1 空 (无显示 ) 小数点的显示由dp位控制, dp=1时,小数点显示,dp=0时,小数点不显示。2、下载数据且按方式1 译码 ( 仅对 hd7279a有效 ) d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d01 1 0 0 1 a2a1a0dp x x x d3d2d1d0x=无影响此指令与上一条指令基本相同,所不同的是译码方式,且只有hd7279a才具有此指令。该指令的译码按下表进行:十六进制d3d2d1d07 段显示00h 0 0 0 0 0 第五章第 98 页01h 0 0 0 1 1 02h 0 0 1 0 2 03h 0 0 1 1 3 04h
30、0 1 0 0 4 05h 0 1 0 1 5 06h 0 1 1 0 6 07h 0 1 1 1 7 08h 1 0 0 0 8 09h 1 0 0 1 9 0ah 1 0 1 0 a 0bh 1 0 1 1 b 0ch 1 1 0 0 c 0dh 1 1 0 1 d 0eh 1 1 1 0 e 0fh 1 1 1 1 f 3、下载数据但不译码d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d01 0 0 1 0 a2a1a0dp a b c d e f g 其中, a2 , a1,a0 为位地址 ( 参见下载数据且译码指令) ,a-g和 dp为显示数据,分别对应7 段 led数
31、码管的各段。4、闪烁控制d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d01 0 0 0 1 0 0 0 d8d7d6d5d4d3d2d1此命令控制各个数码管的闪烁属性。d1- d8分别对应数码管1-8 ,0=闪烁, 1=不闪烁。开机后,缺省的状态为各位均不闪烁。5、消隐控制d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d01 0 0 1 1 0 0 0 d8d7d6d5d4d3d2d1此命令控制各个数码管的消隐属性。d1- d8分别对应数码管1-8 ,1=显示, 0=消隐。当某一位被赋予了消隐属性后,hd7279在扫描时将跳过该位,因此在这种情况下无论对该位写入何
32、值,均不会被显示,但写入的值将被保留,在将该位重新设为显示状态后,最后一次写入的数据将被显示出来。当无需用到全部8 个数码管显示的时候,将不用的位设为消隐属性,可以提高显示的亮度。注意:至少应有一位保持显示状态,如果消隐控制指令中d1- d8全部为 0,该指令将不被接受, hd7279保持原来的消隐状态不变。6、段点亮指令d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d01 1 1 0 0 0 0 0 x x d5d4d3d2d1d0此为段寻址指令,作用为点亮数码管中某一指定的段,或led矩阵中某一指定的led 。指令中, x=无影响; d0- d5为段地址,范围从00h3fh,
33、具体分配为:第五章第 99 页第 1 个数码管的g段地址为00h,f 段为 01h,,a段为 06h,小数点dp为 07h,第 2个数码管的g段为 08h ,f段为 09h,, ,依此类推直至第8个数码管的小数点dp地址为3fh。7、段关闭指令d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d01 1 0 0 0 0 0 0 x x d5d4d3d2d1d0段寻址命令,作用为关闭(熄灭 ) 数码管中的某一段,指令结构与段点亮指令相同,请参阅上文。8、读键盘数据指令d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d00 0 0 1 0 1 0 1 d7d6d5d4d3d2
34、d1d0该指令从 hd7279读出当前的按键代码。 与其它指令不同, 此命令的前一个字节00010101b为微控制器传送到hd7279的指令,而后一个字节d0- d7则为 hd7279返回的按键代码,其范围是 0-3fh( 无键按下时为0 xff) ,各键键盘代码的定义,请参阅图2。此指令的前半段,hd7279的 data引脚处于高阻输入状态,以接受来自微处理器的指令;在指令的后半段,data 引脚从输入状态转为输出状态,输出键盘代码的值。故微处理器连接到 data 引脚的 i/o 口应有一从输出态到输入态的转换过程,详情请参阅本文 串行接口一节的内容。当 hd7279检测到有效的按键时,ke
35、y引脚从高电平变为低电平,并一直保持到按键结束。在此期间,如果hd7279接收到读键盘数据指令,则输出当前按键的键盘代码;如果在收到读键盘指令时没有有效按键,hd7279将输出 ffh (11111111b) 。串行接口hd7279采用串行方式与微处理器通讯,串行数据从data引脚送入芯片, 并由 clk端同步。当片选信号变为低电平后,data引脚上的数据在clk引脚的上升沿被写入hd7279的缓冲寄存器。hd7279的指令结构有三种类型:1、不带数据的纯指令,指令的宽度为8 个 bit,即微处理器需发送8 个 clk脉冲。 2、带有数据的指令,宽度为16 个 bit,即微处理器需发送16个
36、clk脉冲。 3、读取键盘数据指令,宽度为16 个 bit,前 8 个为微处理器发送到hd7279的指令,后8 个 bit 为 hd7279返回的键盘代码。执行此指令时,hd7279的 data端在第 9个 clk脉冲的上升沿变为输出状态,并与第16 个脉冲的下降沿恢复为输入状态,等待接收下一个指令。串行接口的时序如下图:1、纯指令第五章第 100 页cst1t3clkt2data2、带数据指令cst4clkdata 8位指令 ( 高位在前 ) 8 位数据 ( 高位在前 ) 3、读键盘指令cst5t7clkt6t8data读键盘指令 (8 位,高位在前) hd7279 输出的键盘代码(8 位,
37、高位在前 ) 2、em78p156 接口程序硬件连接如图,em78p156 所用时钟频率4mhz, 选 4 个时钟周期为一个指令周期, ; 转移指令用2 个指令周期。程序使用asm456编译程序编译通过。程序中延时时间; 以 hd7279a外接 r=1.5k, c=15pf 为准,如使用不同的cpu时钟频率或r/c 参数,; 请注意调整延时时间。p50 csp51 clkp52 datap53 keyem78p156图 5.14 em78p156 与 hd7279a 的硬件连接第五章第 101 页;* ; 寄存器定义;* status = 0x03 p5 = 5 c = 0 bit_count
38、 = 0x10 data_out = 0x11 data_in = 0x12 ten = 0x13 timer = 0x14 timer1 = 0x15 ;* ; i/o 口定义;* cs = 0 ;cs连接于em78p156的p50 clk = 1 ;clk 连接于 em78p156的 p51 dat = 2 ;dat 连接于 em78p156的 p52 key = 3 ;key 连接于 em78p156的 p53 org 0 x00 jmp start org 0x10 ;* ; 延时子程序;* long_delay: mov a,16 ; 设定延时时间为约50us mov timer,a
39、 delay_loop: djz timer jmp delay_loop ret short_delay: m ov a,3 ; 设定延时时间为约9us mov timer,a short_lp: djz timer jmp short_lp ret ;* ; 发送 1 个字节到hd7279 ,高位在前;* send: mov data_out,a ; 待发送数据存入data_out mov a,8 mov bit_count,a ;设定位记数器 =8 bc p5,cs ; 设 cs为低电平call long_delay ; 长延时send_loop: bc status,c rlc dat
40、a_out ; 输出 1 位bc p5,dat jbc status,c bs p5,dat bs p5,clk ; 设 clk为高电平call short_delay ; 短延时第五章第 102 页bc p5,clk ; 设 clk为低电平call short_delay djz bit_count ; 检查是否8 位均发送完毕jmp send_loop ; 未发送完,发送下一位bc p5,dat ret ; 发送完毕,返回;* ; 从 hd7279接收一个字节,高位在前;* receive: m ov a,8 mov bit_count,a ;设定位记数器 =8 mov a,0b11111
41、100 ; 设 p5.2(data) 口为输入状态iow p5 call long_delay ; 长延时receive_loop: bs p5,clk ; 置 clk为高电平call short_delay ; 短延时bs status,c jbs p5,dat bc status,c rlc data_in ; 读取一位数据bc p5,clk ; 置 clk为低电平call short_delay djz bit_count ; 是否已接收8 位数据jmp receive_loop mov a,0b11111000 ; 重新设 p52(data)口为输出态iow p5 ret ;* ; 初
42、始化;* start: mov a,0b11111000 ;i/o口初始化iow p5 mov a,0b11111001 mov p5,a mov a,0x19 ; 延时约 25ms mov timer,a start_delay: m ov a,0xff mov timer1,a start_delay1: djz timer1 jmp start_delay1 djz timer jmp start_delay mov a,0b10100100 ; 发复位 ( 清除 ) 指令call send 第五章第 103 页bs p5,cs ; 恢复 cs为高电平;* ; 主程序;* main: j
43、bc p5,key ; 检测是否有键按下jmp main mov a,0b00010101 ; 有键按下,发送读键盘指令call send ; 发送读键盘指令call receive ; 从 hd7279a读键盘代码bs p5,cs ; 设 cs为高电平;* ; 16进制 bcd码转换;* clr ten get_dec mov a,10 sub a,data_in jbs status,c jmp over mov data_in,a inc ten jmp get_dec ;* ; 发送按键的bcd码到 hd7279a ;* ; 发 2 次左移指令,使当前显示内容左移,留出空; 位供显示新
44、数据over mov a,0b10100001 ; 左移指令call send ;发送指令到hd7279a mov a,0b10100001 ; 左移指令call send ;发送指令到hd7279a mov a,0b10000001 ; 下载数据且译码指令( 第 2 位) call send ;发送指令到hd7279a mov a,ten call send ;发送十位数字到hd7279a mov a,0b10000000 ; 下载数据且译码指令( 第 1 位) call send ;发送指令到hd7279a mov a,data_in call send ;发送个位数字到hd7279a b
45、s p5,cs wait jbs p5,key ;等待按键放开jmp wait jmp main ;eop 第五章第 104 页1.流程图5.4.算术例程5.4.1.无符号的 bcd 加法二进制做bcd 加法,一定要注意每一位相加结果的调整,以转换成bcd 的数位,本程序使用二个步骤来完成结果调整,(产生 dc 标志)1如果和的最低有效位是大于9 的数,或dc=1 时,将和加6 2经过步骤1 后,如果最高有效位大于9,或相加后c=1,则将和加上60h(即加6到 msd)扩展程序到2 位数以上时,所有位相都必须带c 标志(或 dc)一起相加,而且上面的原则沿深到每一位数的处理,即从原数相加,步骤
46、1、步骤 2 的加法所产生的进位都必须进位到下一位。2.程序:num-1=0x20; 0x20放加数, 0x21放被加数result=0x20; 运行后和放在 0x21 ,进位 num-2=0x21; 放到0x20 中0-flow=0x21; ;加法子程序bcdadd mov a,num-1 add num-2, a; 作二进制加法clr num-1 rlc num-1; 保存进位jbc status, dc; dc=0? jmp adjust; 不是,调整, lsd mov a, 0x06; add num-2, a; 通过lsd加6,测试lsd 9否jbc status, ;判断c=1?
47、inc num-1 jbc status , dc;dc=0 ?sub num-2 ; lsd9恢复原数据jmp over1 adjust mov a, 6h jlsd加6调整;add num-2, a over1 mov a, 60h ;msd加6调整,add num2, a jbc status,c ;msd 9 jmp over3 jbc num-1, 0 sub num-2 ; ret over3 mov a,01h ;保存和的进位 mov num-1,a ret 开始执行二进制加法dc=1lsd 9? lsd加6 cy=1? msd 9?msd加 6 return 主程序main m
48、ov a ,0x99 ; mov num-1 ,a mov a ,0x99 mov num-2 ,a call bcdad self jmp self end 第五章第 105 页开始5.4.2.无符号的 bcd 减法使用二进制数做2 位数 bcd 减法(即做二个数补码的加法),但须注意调整其相减结果成为正确的bcd 数。1如果差的低4 位( lsd ) 9,则 从 lsd 减去 6(产生的dc 被加到下一位数)2步骤 1 它成后,如果差的高4 位( msd) 9,则从 msd 减去 6。一般扩展到二位数以上时,每个bcd 位都使用以上的原则,标志的测试(步骤2)是在二补码的加法完成后进行,当
49、0x20=9,结果是ve,取十补码以取得它的值。2. 程序: num-1=0x20 result=0x20 num-2=0x21 0-flow=0x21; bcdadd mov a,num-1 ;做二进制减法sub num-2, a clr num-1 ;rlc num-1; 保存进位jbs status, dc; dc=1? jmp adjust; 不是, lsd调整jbs num-2, 3 jmp over-1 jbc num-2,2 jmp adjust1;lsd 结果调整jbs num-2,1 jmp over-1 adjst1 mov a ,6 ;不是,转到 msd进行处理jmp o
50、ver1 ; lsd调整(减6)sub num-2,a over-1 jbs num-1,0 ;c=0 ?jmp adjst2 ;是,进行 msd调整clr num-1 jbs num-2,7 ;不是, msd 9? ret jbc num-2 ,6 jmp adjst2 jbs num-2 ,5 ret adjst2 mov a , 0x60 ; msd调整sub num-2 , a clr num-1 , jbs stats,c mov a , 1 mov num-1,a over ret 1流程图return 做2补数的二进制的加法dc=0 ?lsd 9?从lsd减 6 cy=0 ?ms
51、d 9?从msd减6 y n n y main mov a , 0 x23 ; 主程序mov num-1 , a mov a ,0 x99 mov num-2 , a call bcdsub mov a , 0x99 mov num-1, a mov a , 0 x00 mov a , num-2 call bcdsub self goto self end y n y 第五章第 106 页5.4.3.bcd to bin 转换这个程序是将5 位 bcd 数转换成一个16 位二进制数, 5 位 bcd 数依次存放于r0、 r1、r2、msd 在 r0 的最右端,将16 进制数转出示存器h-byte 和 l-byte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《心脏解剖及血供》课件
- 2021年四川省雅安市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2023年辽宁省辽阳市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2022年辽宁省辽阳市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2022年浙江省嘉兴市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 《汉字拼音复习攻略》课件
- 2025年行政诉讼法知识竞赛题库与答案(完整版)
- 2024年PET改性及合金材料项目投资申请报告代可行性研究报告
- 2024年石油产品添加剂:燃料油添加剂项目资金申请报告
- 关于银行实习日记范文锦集八篇
- 肺结核的护理个案
- 陕西省汉中市2024-2025学年高一上学期12月第二次月考地理试题(含答案)
- AutoCAD2024简明教程资料
- 《中国传统文化》课件模板(六套)
- 民航客舱服务管理Ⅱ学习通超星期末考试答案章节答案2024年
- 儿科主任年终总结
- 2023年上海市录用公务员考试真题
- 期末 (试题) -2024-2025学年人教PEP版英语四年级上册
- 第三单元 (单元测试)-2024-2025学年-四年级上册语文统编版
- 浪潮销售在线测评题
- 总经理年会发言稿模板怎么写(8篇素材参考)
评论
0/150
提交评论