第七章AVR单片机的应用.PDF

0596、《AVR高速嵌入式单片机原理与应用》

收藏

资源目录
跳过导航链接。
压缩包内文档预览:(预览前20页/共87页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:6127029    类型:共享资源    大小:15.36MB    格式:ZIP    上传时间:2017-11-24 上传人:超****计 IP属地:浙江
4.8
积分
关 键 词:
avr 高速 嵌入式 单片机 原理 应用 利用 运用
资源描述:
0596、《AVR高速嵌入式单片机原理与应用》,avr,高速,嵌入式,单片机,原理,应用,利用,运用
内容简介:
第七章 AVR 单片机的应用 7 1 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 第七章 AVR单片机的应用 A T M E L 公司的 A V R 单片机, 是增强型 R I S C 内载 F l a s h 的单片机芯片上的 F l a s h 存储器附在用户的产品中, 可随时编程再编程, 使用的产品设计容易, 更新换代方便A V R 单片机采用增强的R I S C 结构, 使其具有高速处理能力, 在一个时钟周期内可执行复杂的指令, 每 M H z 可实现 1 M I P S 的处理能力A V R单片机工作电压为 2 . 7 6 . 0 V , 可以实现耗电最优化A V R的单片机广泛应用于计算机外部设备, 工业实时控制, 仪器仪表, 通讯设备, 家用电器, 宇航设备等各个领域 本书所提供的实用 实验程序均是在 S L - A V R 开发下载实验器上汇编 调试 下载验证通过的,用户可以放心地学习修改 移植, 今后我们还将从网上或电子书光盘形式不断向读者 用户提供实用实验程序的软硬件资料 应用实验源程序见文件夹 , 应用例子* . A S M , 必须编译生成* . O B J文件才可调试, 如要修改* . A S M , 必须修改文件属性, 去掉* . A S M 只读文件属性 7 . 1 . 0 通用延时子程序 ; * * * * * * * * * * * * * * * * * * * * * * A V R 单片机实用程序 * * * * * * * * * * * * * * * * * * * * * * * * ; * 标题: 通用延时子程序, 文件名: D E L A Y . A S M ; * 版本: 1 . 0 ; * 最后更新日期: 2 0 0 0 . 0 9 . 1 0 ; * 支援 E - m a i l : g z s l s l . c o m . c n ; * 描述 ; * 利用寄存器内容减 1 不 0 为转的多级嵌套, 只需改变一个寄存器延时常数, ; * 就可改变延时时间 ; * 作者: S L . Z ; * 程序适用于有 S R A M 的 A V R 单片机 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * . i n c l u d e 8 5 1 5 d e f . i n c ; 器件配置文件, 决不可少, 不然汇编通不过 . D E F T E M P 1 = R 2 0 . D E F C O N = R 2 1 . o r g $ 0 0 0 0 r j m p R E S E T ; 复位 . O R G $ 0 0 1 0 ; 跳过中断区 R E S E T : l d i r 1 6 , h i g h ( R A M E N D ) ; 设 A T 9 0 S 8 5 1 5 堆栈 为$ 0 2 5 F O U T S P H , r 1 6 ; 见器件配置文件 8 5 1 5 d e f . i n c l d i r 1 6 , l o w ( R A M E N D ) O U T S P L , R 1 6 s e r t e m p 1 S E R C O N ; t e m p 1 直接置数$ F F , A 口 o u t D D R A , t e m p 1 ; 方向寄存器设定 A 口为输出 L D I R 1 6 , 0 X 7 0 L O O P : O U T P O R T A , T E M P 1 R C A L L D E L A Y ; 调用通用延时子程序 E O R T E M P 1 , C O N ; 异或 第七章 AVR 单片机的应用 7 2 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN R J M P L O O P ;注意:以后程序中的通用延时子程序从略! d e l a y : ; 通用延时子程序 p u s h r 1 6 ; 进栈需 2 t L 0 : p u s h r 1 6 ; 进栈需 2 t L 1 : p u s h r 1 6 ; 进栈需 2 t L 2 : p u s h r 1 6 ; 进栈需 2 t L 3 : d e c r 1 6 ; - 1 需 1 t b r n e L 3 ; 不为 0 转, 为 0 顺执, 需 1 t / 2 t p o p r 1 6 ; 出栈 需 2 t d e c r 1 6 ; - 1 需 1 t b r n e L 2 ; 不为 0 转, 为 0 顺执, 需 1 t / 2 t p o p r 1 6 ; 出栈需 2 t d e c r 1 6 ; - 1 需 1 t b r n e L 1 ; 不为 0 转, 为 0 顺执, 需 1 t / 2 t p o p r 1 6 ; 出栈需 2 t d e c r 1 6 ; - 1 需 1 t b r n e L 0 ; 不为 0 转, 为 0 顺执, 需 1 T / 2 T p o p r 1 6 ; 出栈需 2 t r e t ; 子程序返回需 4 t ;* ;* 二次嵌套通用延时程序 * ;* * ;* if fos=8mhz time (3.5us-1s) * ;* dt time * ;* 22 1ms * ;* 29 2ms * 第七章 AVR 单片机的应用 7 3 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN ;* 40 5ms * ;* 51 10ms * ;* 65 20ms * ;* 90 50ms * ;* 114 100ms * ;* 144 200ms * ;* 197 500ms * ;* 249 1s * ;* delay: push dt del1: push dt del2: push dt del3: dec dt brne del3 pop dt dec dt brne del2 pop dt dec dt brne del1 pop dt ret ;* ;* 一次循环通用延时程序 * ;* * ;* if fos=8mhz time (3.5us-10ms) * ;* dt time * ;* 71 1ms * ;* 101 2ms * ;* 161 5ms * ;* 228 10ms * ;* delay: push dt del2: push dt del3: dec dt brne del3 pop dt dec dt brne del2 pop dt ret 第七章 AVR 单片机的应用 7 4 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 三次嵌套通用延时程序 , 在 8 M H z 晶振下测试数据, H 为十六进制, D 为十进制 通用延时子程序时间常数所对应的延时周期数及时间见下表 H D T 周期数 t H D T 周期数 t 1 1 2 8 3 . 5 0 s 2 1 3 3 2 1 9 5 5 6 2 7 . 4 4 4 5 m s 2 2 7 6 9 . 5 0 s 2 2 3 4 2 4 4 7 5 6 3 0 . 5 9 4 5 3 3 1 6 6 2 0 . 7 5 2 3 3 5 2 7 2 0 6 2 3 4 . 0 0 7 7 5 4 4 3 1 6 3 9 . 5 0 2 4 3 6 3 0 1 5 8 8 3 7 . 6 9 8 5 5 5 5 4 7 6 8 . 3 8 2 5 3 7 3 3 3 4 5 1 4 1 . 6 8 1 3 8 6 6 8 8 3 1 1 0 . 3 8 2 6 3 8 3 6 7 7 7 1 4 5 . 9 7 1 3 8 7 7 1 3 5 1 1 6 8 . 8 8 2 7 3 9 4 0 4 6 7 1 5 0 . 5 8 3 8 8 m s 8 8 1 9 8 1 2 4 7 . 6 3 2 8 4 0 4 4 4 2 7 7 5 5 . 5 3 4 6 3 9 9 2 8 0 6 3 5 0 . 7 5 2 9 4 1 4 8 6 7 1 8 6 0 . 8 3 9 7 5 A 1 0 3 8 6 2 4 8 2 . 7 5 2 A 4 2 5 3 2 1 2 6 6 6 . 5 1 5 7 5 B 1 1 5 2 0 0 0 . 6 5 m s 2 B 4 3 5 8 0 6 3 6 7 2 . 5 7 9 5 C 1 2 6 8 0 0 0 . 8 5 m s 2 C 4 4 6 3 2 3 8 6 7 9 . 0 4 8 2 5 D 1 3 8 8 0 0 1 . 1 0 m s 2 D 4 5 6 8 7 5 1 7 8 5 . 9 3 9 6 3 E 1 4 1 1 2 2 1 1 . 4 2 E 4 6 7 4 6 1 7 3 9 3 . 2 7 1 6 3 F 1 5 1 4 0 7 7 1 . 7 6 2 F 4 7 8 0 8 5 0 1 1 0 1 . 0 6 2 6 m s 1 0 1 6 1 7 4 4 3 2 . 1 8 m s 3 0 4 8 8 7 4 6 5 1 1 0 9 . 3 3 1 4 1 1 1 7 2 1 3 7 6 2 . 6 7 3 1 4 9 9 4 4 7 7 6 1 1 8 . 0 9 7 1 2 1 8 2 5 9 3 6 3 . 2 4 m s 3 2 5 0 1 0 1 9 0 3 2 1 2 7 . 3 7 9 1 3 1 9 3 1 1 8 6 3 . 9 0 3 3 5 1 1 0 9 7 5 7 8 1 3 7 . 1 9 7 3 1 4 2 0 3 7 1 9 2 4 . 6 5 3 4 5 2 1 1 8 0 5 7 6 1 4 7 . 5 7 2 1 5 2 1 4 4 0 2 3 5 . 5 0 m s 3 5 5 3 1 2 6 8 1 9 1 1 5 8 . 5 2 3 9 1 6 2 2 5 1 7 5 1 6 . 4 7 3 6 5 4 1 3 6 0 5 9 1 1 7 0 . 0 7 3 9 1 7 2 3 6 0 4 5 1 7 . 5 6 3 7 5 5 1 4 5 7 9 4 7 1 8 2 . 2 4 3 4 1 8 2 4 7 0 2 0 1 8 . 7 8 3 8 5 6 1 5 6 0 4 3 3 1 9 5 . 0 5 4 1 m s 1 9 2 5 8 1 0 8 2 1 0 . 1 4 m s 3 9 5 7 1 6 6 8 2 2 6 2 0 8 . 5 2 8 3 1 A 2 6 9 3 1 7 8 1 1 . 6 5 3 A 5 8 1 7 8 1 5 0 6 2 2 2 . 6 8 8 3 1 B 2 7 1 0 6 5 7 6 1 3 . 3 2 3 B 5 9 1 9 0 0 4 5 6 2 3 7 . 5 5 7 1 C 2 8 1 2 1 3 6 6 1 5 . 1 7 3 C 6 0 2 0 2 5 2 6 2 2 5 3 . 1 5 7 8 m s 1 D 2 9 1 3 7 6 4 1 1 7 . 2 1 3 D 6 1 2 1 5 6 1 1 3 2 6 9 . 5 1 4 1 1 E 3 0 1 5 5 4 9 7 1 9 . 4 4 3 E 6 2 2 2 9 3 2 0 1 2 8 6 . 6 5 0 1 1 F 3 1 1 7 5 0 3 3 2 1 . 8 8 3 F 6 3 2 4 3 6 7 2 1 3 0 4 . 5 9 0 1 m s 2 0 3 2 1 9 6 3 5 1 2 4 . 5 4 4 0 6 4 2 5 8 6 8 7 1 3 2 3 . 3 6 第七章 AVR 单片机的应用 7 5 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN H D T 周期数 t ( 秒) H D T 周期数 t ( 秒) 4 1 6 5 2 7 4 3 8 5 2 0 . 3 4 2 9 8 1 5 6 1 9 7 1 2 7 3 3 8 8 0 1 . 5 9 1 7 3 5 4 2 6 6 2 9 0 7 8 6 8 0 . 3 6 3 4 8 3 5 6 2 9 8 1 3 2 4 8 6 8 0 1 . 6 5 6 0 8 5 4 3 6 7 3 0 7 9 1 2 6 0 . 3 8 4 8 9 0 8 6 3 9 9 1 3 7 7 8 9 3 0 1 . 7 2 2 3 6 6 4 4 6 8 3 2 5 7 8 3 6 0 . 4 0 7 2 2 9 5 6 4 1 0 0 1 4 3 2 4 9 3 0 1 . 7 9 0 6 1 7 4 5 6 9 3 4 4 4 2 1 1 0 . 4 3 0 5 2 6 4 6 5 1 0 1 1 4 8 8 7 0 0 0 1 . 8 6 0 8 7 5 4 6 7 0 3 6 3 8 4 6 7 0 . 4 5 4 8 0 8 4 6 6 1 0 2 1 5 4 6 5 4 5 0 1 . 9 3 3 1 8 1 4 7 7 1 3 8 4 0 8 2 3 0 . 4 8 0 1 0 2 9 6 7 1 0 3 1 6 0 6 0 5 9 0 2 . 0 0 7 5 7 4 S 4 8 7 2 4 0 5 1 5 0 1 0 . 5 0 6 4 3 7 6 S 6 8 1 0 4 1 6 6 7 2 7 4 0 2 . 0 8 4 0 9 3 4 9 7 3 4 2 7 0 7 2 6 0 . 5 3 3 8 4 0 8 6 9 1 0 5 1 7 3 0 2 2 2 0 2 . 1 6 2 7 7 8 4 A 7 4 4 4 9 8 7 2 6 0 . 5 6 2 3 4 0 8 6 A 1 0 6 1 7 9 4 9 3 6 0 2 . 2 4 3 6 7 4 B 7 5 4 7 3 5 7 3 2 0 . 5 9 1 9 6 6 5 6 B 1 0 7 1 8 6 1 4 4 8 0 2 . 3 2 6 8 0 9 4 C 7 6 4 9 8 1 9 7 8 0 . 6 2 2 7 4 7 3 6 C 1 0 8 1 9 2 9 7 9 1 0 2 . 4 1 2 2 3 8 4 D 7 7 5 2 3 7 7 0 1 0 . 6 5 4 7 1 2 6 6 D 1 0 9 1 9 9 9 9 9 8 0 2 . 4 9 9 9 9 8 4 E 7 8 5 5 0 3 1 4 1 0 . 6 8 7 8 9 2 6 6 E 1 1 0 2 0 7 2 1 0 4 0 2 . 5 9 0 1 3 4 F 7 9 5 7 7 8 5 4 1 0 . 7 2 2 3 1 7 6 6 F 1 1 1 2 1 4 6 1 4 1 0 2 . 6 8 2 6 7 7 5 0 8 0 6 0 6 4 1 4 7 0 . 7 5 8 0 1 8 4 7 0 1 1 2 2 2 2 2 1 4 5 0 2 . 7 7 7 6 8 2 5 1 8 1 6 3 6 0 2 0 8 0 . 7 9 5 0 2 6 7 1 1 1 3 2 3 0 0 1 5 0 0 2 . 8 7 5 1 8 7 5 2 8 2 6 6 6 6 9 7 6 0 . 8 3 3 3 7 2 7 2 1 1 4 2 3 8 0 1 9 0 0 2 . 9 7 5 2 3 7 5 3 8 3 6 9 8 4 7 0 6 0 . 8 7 3 0 8 8 2 7 3 1 1 5 2 4 6 2 3 0 0 0 3 . 0 7 7 8 7 5 S 5 4 8 4 7 3 1 3 6 5 6 0 . 9 1 4 2 0 7 7 4 1 1 6 2 5 4 6 5 1 7 0 3 . 1 8 3 1 4 6 5 5 8 5 7 6 5 4 0 8 7 0 . 9 5 6 7 6 0 9 7 5 1 1 7 2 6 3 2 8 7 5 0 3 . 2 9 1 0 9 4 5 6 8 6 8 0 0 6 2 6 3 1 . 0 0 0 7 8 S 7 6 1 1 8 2 7 2 1 4 1 1 0 3 . 4 0 1 7 6 4 5 7 8 7 8 3 7 0 4 5 1 1 . 0 4 6 3 1 7 7 1 1 9 2 8 1 2 1 6 1 0 3 . 5 1 5 2 0 2 5 8 8 8 8 7 4 6 9 2 1 1 . 0 9 3 3 7 7 8 1 2 0 2 9 0 5 1 6 2 0 3 . 6 3 1 4 5 2 5 9 8 9 9 1 3 5 9 4 6 1 . 1 4 1 9 9 3 7 9 1 2 1 3 0 0 0 4 5 0 0 3 . 7 5 0 5 6 2 5 A 9 0 9 5 3 7 8 0 2 1 . 1 9 2 2 2 5 7 A 1 2 2 3 0 9 8 0 6 3 0 3 . 8 7 2 5 7 8 5 B 9 1 9 9 5 2 7 6 8 1 . 2 4 4 0 9 6 7 B 1 2 3 3 1 9 8 0 3 8 0 3 . 9 9 7 5 4 7 S 5 C 9 2 1 0 3 8 1 1 3 0 1 . 2 9 7 6 4 1 7 C 1 2 4 3 3 0 0 4 1 3 0 4 . 1 2 5 5 1 6 5 D 9 3 1 0 8 2 3 1 6 0 1 . 3 5 2 8 9 5 7 D 1 2 5 3 4 0 5 2 2 6 0 4 . 2 5 6 5 3 2 5 E 9 4 1 1 2 7 9 1 6 0 1 . 4 0 9 8 9 5 7 E 1 2 6 3 5 1 2 5 1 5 0 4 . 3 9 0 6 4 4 5 F 9 5 1 1 7 4 9 4 2 0 1 . 4 6 8 6 7 7 7 F 1 2 7 3 6 2 2 3 2 0 0 4 . 5 2 7 9 6 0 9 6 1 2 2 3 4 2 2 0 1 . 5 2 9 2 8 8 0 1 2 8 3 7 3 4 6 7 9 0 4 . 6 6 8 3 4 9 第七章 AVR 单片机的应用 7 6 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN H D T 周期数 t ( 秒) H D T 周期数 t ( 秒) 8 1 1 2 9 3 8 4 9 6 3 2 0 4 . 8 1 2 0 3 9 A 1 1 6 1 9 1 4 8 3 5 8 0 1 1 . 4 3 5 4 5 8 2 1 3 0 3 9 6 7 2 1 7 0 4 . 9 5 9 0 2 2 A 2 1 6 2 9 3 7 2 9 0 7 0 1 1 . 7 1 6 1 3 8 3 1 3 1 4 0 8 7 4 7 6 0 5 . 1 0 9 3 4 5 A 3 1 6 3 9 6 0 1 5 6 5 0 1 2 . 0 0 1 9 6 8 4 1 3 2 4 2 1 0 4 4 8 0 5 . 2 6 3 0 6 A 4 1 6 4 9 8 3 4 3 7 9 0 1 2 . 2 9 2 9 7 8 5 1 3 3 4 3 3 6 1 7 3 0 5 . 4 2 0 2 1 7 A 5 1 6 5 1 0 0 7 1 4 0 0 1 2 . 5 8 9 2 5 8 6 1 3 4 4 4 6 4 6 9 3 0 5 . 5 8 0 8 6 6 A 6 1 6 6 1 0 3 1 2 6 8 0 1 2 . 8 9 0 8 5 8 7 1 3 5 4 5 9 6 0 4 9 0 5 . 7 4 5 0 6 1 A 7 1 6 7 1 0 5 5 8 2 8 0 1 3 . 1 9 7 8 4 8 8 1 3 6 4 7 3 0 2 8 1 0 5 . 9 1 2 8 5 1 A 8 1 6 8 1 0 8 0 8 2 3 0 1 3 . 5 1 0 2 8 8 9 1 3 7 4 8 6 7 4 3 3 0 6 . 0 8 4 2 9 1 A 9 1 6 9 1 1 0 6 2 5 9 0 1 3 . 8 2 8 2 4 8 A 1 3 8 5 0 0 7 5 4 5 0 6 . 2 5 9 4 3 1 A A 1 7 0 1 1 3 2 1 4 1 0 1 4 . 1 5 1 7 7 8 B 1 3 9 5 1 5 0 6 6 0 0 6 . 4 3 8 3 2 4 A B 1 7 1 1 1 5 8 4 7 6 0 1 4 . 4 8 0 9 4 8 C 1 4 0 5 2 9 6 8 2 0 0 6 . 6 2 1 0 2 5 A C 1 7 2 1 1 8 5 2 6 6 0 1 4 . 8 1 5 8 3 8 D 1 4 1 5 4 4 6 0 6 9 0 6 . 8 0 7 5 8 7 A D 1 7 3 1 2 1 2 5 1 9 0 1 5 . 1 5 6 4 9 8 E 1 4 2 5 5 9 8 4 5 0 0 6 . 9 9 8 0 6 3 A E 1 7 4 1 2 4 0 2 3 9 0 1 5 . 5 0 2 9 9 8 F 1 4 3 5 7 5 4 0 0 6 0 7 . 1 9 2 5 0 7 A F 1 7 5 1 2 6 8 4 3 2 0 1 5 . 8 5 5 4 9 0 1 4 4 5 9 1 2 7 8 1 0 7 . 3 9 0 9 7 6 B 0 1 7 6 1 2 9 7 1 0 2 0 1 6 . 2 1 3 7 8 9 1 1 4 5 6 0 7 4 8 1 9 0 7 . 5 9 3 5 2 4 B 1 1 7 7 1 3 2 6 2 5 6 0 1 6 . 5 7 8 2 9 2 1 4 6 6 2 4 0 1 6 5 0 7 . 8 0 0 2 0 6 B 2 1 7 8 1 3 5 5 8 9 8 0 1 6 . 9 4 8 7 3 9 3 1 4 7 6 4 0 8 8 6 2 0 8 . 0 1 1 0 7 8 B 3 1 7 9 1 3 8 6 0 3 5 0 1 7 . 3 2 5 4 3 9 4 1 4 8 6 5 8 0 9 5 8 0 8 . 2 2 6 1 9 7 B 4 1 8 0 1 4 1 6 6 7 1 0 1 7 . 7 0 8 3 8 9 5 1 4 9 6 7 5 6 4 9 5 0 8 . 4 4 5 6 1 9 B 5 1 8 1 1 4 4 7 8 1 2 0 1 8 . 0 9 7 6 5 9 6 1 5 0 6 9 3 5 5 2 1 0 8 . 6 6 9 4 0 1 B 6 1 8 2 1 4 7 9 4 6 3 2 1 8 . 4 9 3 2 9 9 7 1 5 1 7 1 1 8 0 8 0 0 8 . 8 9 7 6 B 7 1 8 3 1 5 1 1 6 3 1 2 1 8 . 8 9 5 3 9 9 8 1 5 2 7 3 0 4 2 2 0 0 9 . 1 3 0 2 7 5 B 8 1 8 4 1 5 4 4 3 2 0 8 1 9 . 3 0 4 0 1 9 9 1 5 3 7 4 9 3 9 8 6 0 9 . 3 6 7 4 8 3 B 9 1 8 5 1 5 7 7 5 3 7 6 1 9 . 7 1 9 2 2 9 A 1 5 4 7 6 8 7 4 2 6 0 9 . 6 0 9 2 8 3 B A 1 8 6 1 6 1 1 2 8 7 2 2 0 . 1 4 1 0 9 9 B 1 5 5 7 8 8 4 5 8 7 0 9 . 8 5 5 7 3 4 B B 1 8 7 1 6 4 5 5 7 6 0 2 0 . 5 6 9 7 9 C 1 5 6 8 0 8 5 5 1 6 0 1 0 . 1 0 6 9 B C 1 8 8 1 6 8 0 4 0 8 8 2 1 . 0 0 5 1 1 9 D 1 5 7 8 2 9 0 2 6 0 0 1 0 . 3 6 2 8 3 B D 1 8 9 1 7 1 5 7 9 1 2 2 1 . 4 4 7 3 9 9 E 1 5 8 8 4 9 8 8 6 8 0 1 0 . 6 2 3 5 8 B E 1 9 0 1 7 5 1 7 2 9 6 2 1 . 8 9 6 6 2 9 F 1 5 9 8 7 1 1 3 8 8 0 1 0 . 8 8 9 2 3 B F 1 9 1 1 7 8 8 2 2 9 6 2 2 . 3 5 2 8 7 A 0 1 6 0 8 9 2 7 8 6 9 0 1 1 . 1 5 9 8 4 C 0 1 9 2 1 8 2 5 2 9 7 6 2 2 . 8 1 6 2 2 第七章 AVR 单片机的应用 7 7 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN H D T 周期数 t ( 秒) H D T 周期数 t ( 秒) 0 C 1 1 9 3 1 8 6 2 9 3 8 4 2 3 . 2 8 6 7 3 E 1 2 2 5 3 4 0 6 7 0 9 6 4 2 . 5 8 3 8 7 C 2 1 9 4 1 9 0 1 1 5 8 4 2 3 . 7 6 4 4 8 E 2 2 2 6 3 4 6 6 7 4 6 4 4 3 . 3 3 4 3 3 C 3 1 9 5 1 9 3 9 9 6 3 2 2 4 . 2 4 9 5 4 E 3 2 2 7 3 5 2 7 5 7 3 6 4 4 . 0 9 4 6 7 C 4 1 9 6 1 9 7 9 3 5 9 2 2 4 . 7 4 1 9 9 E 4 2 2 8 3 5 8 9 1 9 6 8 4 4 . 8 6 4 9 6 C 5 1 9 7 2 0 1 9 3 5 2 8 2 5 . 2 4 1 9 1 E 5 2 2 9 3 6 5 1 6 2 4 8 4 5 . 6 4 5 3 1 C 6 1 9 8 2 0 5 9 9 4 8 8 2 5 . 7 4 9 3 6 E 6 2 3 0 3 7 1 4 8 6 3 2 4 6 . 4 3 5 7 9 C 7 1 9 9 2 1 0 1 1 5 3 6 2 6 . 2 6 4 4 2 E 7 2 3 1 3 7 7 8 9 2 0 0 4 7 . 2 3 6 5 C 8 2 0 0 2 1 4 2 9 7 3 6 2 6 . 7 8 7 1 7 E 8 2 3 2 3 8 4 3 8 0 0 8 4 8 . 0 4 7 5 1 C 9 2 0 1 2 1 8 5 4 1 4 4 2 7 . 3 1 7 6 8 E 9 2 3 3 3 9 0 9 5 1 3 6 4 8 . 8 6 8 9 2 C A 2 0 2 2 2 2 8 4 8 3 2 2 7 . 8 5 6 0 4 E A 2 3 4 3 9 7 6 0 6 5 6 4 9 . 7 0 0 8 2 C B 2 0 3 2 2 7 2 1 8 4 8 2 8 . 4 0 2 3 1 E B 2 3 5 4 0 4 3 4 6 4 0 5 0 . 5 4 3 3 C C 2 0 4 2 3 1 6 5 2 6 4 2 8 . 9 5 6 5 8 E C 2 3 6 4 1 1 1 7 1 5 2 5 1 . 3 9 6 4 4 C D 2 0 5 2 3 6 1 5 1 3 6 2 9 . 5 1 8 9 2 E D 2 3 7 4 1 8 0 8 2 7 2 5 2 . 2 6 0 3 4 C E 2 0 6 2 4 0 7 1 5 3 6 3 0 . 0 8 9 4 2 E E 2 3 8 4 2 5 0 8 0 5 6 5 3 . 1 3 5 0 7 C F 2 0 7 2 4 5 3 4 5 1 2 3 0 6 6 8 1 4 E F 2 3 9 4 3 2 1 6 6 0 0 5 4 . 0 2 0 7 5 D 0 2 0 8 2 5 0 0 4 1 3 6 3 1 . 2 5 5 1 7 F 0 2 4 0 4 3 9 3 3 9 6 0 5 4 . 9 1 7 4 5 D 1 2 0 9 2 5 4 8 0 4 6 4 3 1 . 8 5 0 5 8 F 1 2 4 1 4 4 6 6 0 2 1 6 5 5 . 8 2 5 2 7 D 2 2 1 0 2 5 9 6 3 5 6 8 3 2 . 4 5 4 4 6 F 2 2 4 2 4 5 3 9 5 4 4 0 5 6 . 7 4 4 3 D 3 2 1 1 2 6 4 5 3 5 1 2 3 3 . 0 6 6 8 9 F 3 2 4 3 4 6 1 3 9 7 0 4 5 7 . 6 7 4 6 3 D 4 2 1 2 2 6 9 5 0 3 6 0 3 3 . 6 8 7 9 5 F 4 2 4 4 4 6 8 9 3 0 7 2 5 8 . 6 1 6 3 4 D 5 2 1 3 2 7 4 5 4 1 6 8 3 4 . 3 1 7 7 1 F 5 2 4 5 4 7 6 5 5 6 4 0 5 9 . 5 6 9 5 5 D 6 2 1 4 2 7 9 6 5 0 0 8 3 4 . 9 5 6 2 6 F 6 2 4 6 4 8 4 2 7 4 6 4 6 0 . 5 3 4 3 3 D 7 2 1 5 2 8 4 8 2 9 4 4 3 5 . 6 0 3 6 8 F 7 2 4 7 4 9 2 0 8 6 2 4 6 1 . 5 1 0 7 8 D 8 2 1 6 2 9 0 0 8 0 4 0 3 6 . 2 6 0 0 5 F 8 2 4 8 4 9 9 9 9 2 0 0 6 2 . 4 9 9 D 9 2 1 7 2 9 5 4 0 3 6 0 3 6 . 9 2 5 4 5 F 9 2 4 9 5 0 7 9 9 2 6 4 6 3 . 4 9 9 0 8 D A 2 1 8 3 0 0 7 9 9 7 6 3 7 . 5 9 9 9 7 F A 2 5 0 5 1 6 0 8 8 8 8 6 4 . 5 1 1 1 1 D B 2 1 9 3 0 6 2 6 9 5 2 3 8 . 2 8 3 6 9 F B 2 5 1 5 2 4 2 8 1 5 2 6 5 . 5 3 5 1 9 D C 2 2 0 3 1 1 8 1 3 5 2 3 8 . 9 7 6 6 9 F C 2 5 2 5 3 2 5 7 1 3 6 6 6 . 5 7 1 4 2 D D 2 2 1 3 1 7 4 3 2 4 8 3 9 . 6 7 9 0 6 F D 2 5 3 5 4 0 9 5 9 0 4 6 7 . 6 1 9 8 8 D E 2 2 2 3 2 3 1 2 7 0 4 4 0 . 3 9 0 8 8 F E 2 5 4 5 4 9 4 4 5 4 4 6 8 . 6 8 0 6 8 D F 2 2 3 3 2 8 8 9 7 7 6 4 1 . 1 1 2 2 2 F F 2 5 5 5 5 8 0 3 1 2 8 6 9 . 7 5 3 9 1 E 0 2 2 4 3 3 4 7 4 5 5 2 4 1 . 8 4 3 1 9 0 0 2 5 6 5 6 6 7 1 7 3 6 7 0 . 8 3 9 6 7 $ 0 0 为延时最长, 因为$ 0 0 - 1 = $ F F 第七章 AVR 单片机的应用 7 8 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 7.2 简单I/O口输出实验 ( 1 ) S L A V R 7 2 1 . A S M : 测试验证 D I P 2 0 A V R 单片机 B 口D 口引脚输出 和 S L - A V R 开发下载实验器功能, L E D 逐位移位, 移位速度会变化 ; A T 9 0 S 1 2 0 0 引脚图 * 表示引脚接 L E D 发光二极管 ; 表示灯亮移位方向 ; / R S T 1 2 0 V C C ; P D 0 * * P B 7 ; P D 1 * * P B 6 ; X T A L 2 * P B 5 ; X T A L 1 * P B 4 ; P D 2 * * P B 3 ; P D 3 * * P B 2 ; P D 4 * * P B 1 ; P D 5 * * P B 0 ; G N D 1 0 1 1 * P D 6 . i n c l u d e 1 2 0 0 d e f . i n c ; 必须写器件配置文件 r j m p R E S E T ; R e s e t H a n d l e . o r g $ 0 0 5 R E S E T : L D I r 1 6 , 0 X F F ; 设 B 口D 口为输出 O U T d d r b , R 1 6 ; 设 b 口方向寄存器为输出 O U T D D R D , R 1 6 ; 设 D 口方向寄存器为输出 o u t p o r t d , r 1 6 ; 关 D 口 L E D , S L - A V R 实验器硬件设定高电平 L E D 灯灭 o u t p o r t b , r 1 6 ; 关 B 口 L E D s t a r t : l d i R 1 7 , 0 x 0 8 ; 循环次数 l d i r 1 8 , 0 x 7 f ; 0 b 0 1 1 1 1 1 1 1 , S L - A V R 实验器硬件设定低电平 L E D 灯亮 l o o p : o u t p o r t b , r 1 8 ; B 口. 7 位 L E D 灯亮 s e c ; c = 1 r o r r 1 8 ; 通过进位右循环 r c a l l d e l a y ; 调用延时子程序 d e c r 1 7 ; - 1 b r n e l o o p ; 检测 R 1 7 循环不 0 为转移, 为 0 按顺序执行 o u t p o r t b , r 1 6 ; 关 B 口 l d i r 1 8 , 0 x b f ; 0 b 1 0 1 1 1 1 1 1 o u t p o r t d , r 1 8 ; D 口. 6 位 L E D 灯亮 r c a l l d e l a y ; 延时 l d i r 1 8 , 0 x f f o u t p o r t d , r 1 8 ; 关 D 口 r j m p s t a r t ; 循环 d e l a y : l d i r 2 9 , 0 x 0 a ; 延时子程序 d e l a y 1 : d e c r 3 0 ; 复位后 R 3 0 = 0 X 0 0 第七章 AVR 单片机的应用 7 9 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN b r n e d e l a y 1 ; R 3 0 不为 0 转, 为 0 按顺序执行 d e c r 3 1 ; 复位后 R 3 1 = 0 X 0 0 b r n e d e l a y 1 ; R 3 0 不为 0 转, 为 0 按顺序执行 d e c r 2 9 ; 复位后 R 2 9 = 0 X 0 0 b r n e d e l a y 1 ; R 2 9 不为 0 转, 为 0 按顺序执行 r e t ; 子程序返回 ( 2 ) S L A V R 7 2 2 . A S M :测试验证 A V R D I P 4 0 引脚输出和 S L - A V R 开发下载实验器功能 . i n c l u d e 8 5 1 5 d e f . i n c ; 必须写器件配置文件 . o r g $ 0 0 0 0 r j m p R E S E T ; R e s e t H a n d l e . d e f t e m p = r 2 0 . d e f z h = r 3 1 . o r g $ 0 0 1 0 R E S E T : l d i r 1 6 , h i g h ( R A M E N D ) ; 设堆栈 o u t S P H , r 1 6 ; l d i r 1 6 , l o w ( R A M E N D ) o u t S P L , r 1 6 s e r t e m p ; 直接装入$ F F , o u t D D R A , t e m p ; 口的方向寄存器设定, 为输出 o u t D D R B , t e m p o u t D D R C , t e m p o u t D D R D , t e m p f o r e v e r : c l r t e m p ; 硬件设低电平 L E D 灯亮 o u t P O R T A , t e m p ; P O R T A 口 L E D 灯亮 o u t P O R T B , t e m p ; B 口 L E D 灯亮 o u t P O R T C , t e m p ; C 口 L E D 灯亮 o u t P O R T D , t e m p ; D 口 L E D 灯亮 l d i R 1 6 , 0 X 5 6 ; 装延时常数, 灯亮延时 1 秒, 可修改该参数, 应另存一个文件名 r c a l l d e l a y ; 调用延时子程序 s e r t e m p ; 硬件设高电平 L E D 灯灭 o u t P O R T A , t e m p ; P O R T A 口 L E D 灯灭 o u t P O R T B , t e m p ; B 口 L E D 灯灭 o u t P O R T C , t e m p ; C 口 L E D 灯灭 o u t P O R T D , t e m p ; D 口 L E D 灯灭 l d i R 1 6 , 0 X 4 8 ; 装延时常数, 灯灭延时 0 . 5 秒, 可修改该参数 r c a l l d e l a y ; 调用延时子程序 r j m p f o r e v e r ; 无限循环 delay: ;通用延时子程序略,R16=$56,延时 1 秒,$67 延时 2 秒, . . . . . . 第七章 AVR 单片机的应用 7 10 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN ( 3 ) S L A V R 7 2 3 . A S M : 测试验证 A V R D I P 4 0 引脚输出和 S L - A V R 开发下载实验器功能 测试 A 口B 口C 口D 口 L E D 灯亮循环变速移位 ; D I P 4 0 A T 9 0 S 8 5 1 5 引脚排列图, * 表示引脚上接 L E D 灯 ; 表示 L E D 亮灯移动方向 ; ; P B 0 * 1 4 0 V C C ; P B 1 * * P A 0 ; P B 2 * * P A 1 ; P B 3 * * P A 2 ; P B 4 * * P A 3 ; P B 5 * * P A 4 ; P B 6 * * P A 5 ; P B 7 * * P A 6 ; / R E S E T * P A 7 ; P D 0 * I C P ; P D 1 * A L E ; P D 2 * O C 1 B ; P D 3 * * P C 7 ; P D 4 * * P C 6 ; P D 5 * * P C 5 ; P D 6 * * P C 4 ; P D 7 * * P C 3 ; X T A L 2 * P C 2 ; X T A L 1 * P C 1 ; G N D 2 0 2 1 * P C 0 . i n c l u d e 8 5 1 5 d e f . i n c ; 器件配置文件 r j m p R E S E T ; R e s e t H a n d l e . o r g $ 0 0 d ; 跳过中断区 R E S E T : L D I R 1 6 , $ 5 F ; 必须先设堆栈, 因为复位后 S P L = 0 X 0 0 , S P H = 0 X 0 0 O U T S P L , R 1 6 ; A V R 进堆栈是- 1 , 出栈时+ 1 , 与 M C S - 5 1 进出栈方向相反 L D I R 1 6 , $ 0 2 ; O U T S P H , R 1 6 ; 设堆栈底为$ 0 2 5 F , 为 A V R A T 9 0 S 8 5 1 5 ; 内部 S R A M ( $ 0 0 6 0 - $ 0 2 5 F ) 底 L D I r 1 6 , 0 X F F ; O U T D D R B , R 1 6 ; 设方向寄存器为输出 O U T D D R D , R 1 6 o u t d d r a , r 1 6 o u t d d r c , r 1 6 o u t p o r t d , r 1 6 ; 关 D 口, 硬件设定高电平 L E D 关 o u t p o r t b , r 1 6 ; 关 B 口, 硬件设定高电平 L E D 关 o u t p o r t a , r 1 6 ; 关 A 口, 硬件设定高电平 L E D 关 第七章 AVR 单片机的应用 7 11 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN o u t p o r t c , r 1 6 ; 关 C 口, 硬件设定高电平 L E D 关 s t : l d i r 2 8 , 0 x 0 8 ; 循环次数 s t a r t b : l d i R 1 7 , 0 x 0 8 l d i r 1 8 , 0 x f e ; 0 b 1 1 1 1 1 1 1 0 l o o p b : o u t p o r t b , r 1 8 ; 开 b 口. 0 位 L E D 灯亮, 如何修改使 2 个 ; 或 3 个或 1 隔 1 等 L E D 灯亮移位 s e c ; 置进位标志 C = 1 r o l r 1 8 ; 通过进位左循环 m o v r 2 9 , r 2 8 ; 移位( 延时) 次数 r c a l l d e l a y ; 调用延时子程序 d e c r 1 7 ; b r n e l o o p b ; R 1 7 不为 0 转, 为 0 顺执 o u t p o r t b , r 1 6 ; 关 B 口 s t a r t d : l d i R 1 7 , 0 x 0 8 l d i r 1 8 , 0 x f e ; 0 b 1 1 1 1 1 1 1 0 l o o p d : o u t p o r t d , r 1 8 ; 开 d 口. 0 位 L E D 灯亮 s e c ; C = 1 r o l r 1 8 ; 通过进位左循环 m o v r 2 9 , r 2 8 r c a l l d e l a y d e c r 1 7 b r n e l o o p d o u t p o r t d , r 1 6 s t a r t c : l d i R 1 7 , 0 x 0 8 l d i r 1 8 , 0 x f e ; 0 b 1 1 1 1 1 1 1 0 l o o p c : o u t p o r t c , r 1 8 ; 开 c 口. 0 位 L E D 灯亮 s e c r o l r 1 8 ; 通过进位右循环 m o v r 2 9 , r 2 8 r c a l l d e l a y d e c r 1 7 b r n e l o o p c o u t p o r t c , r 1 6 s t a r t a : l d i R 1 7 , 0 x 0 8 l d i r 1 8 , 0 x 7 f ; 0 b 0 1 1 1 1 1 1 1 l o o p a : o u t p o r t a , r 1 8 ; 开 a 口. 7 位 L E D 灯亮 s e c r o r r 1 8 ; 通过进位左循环 m o v r 2 9 , r 2 8 r c a l l d e l a y d e c r 1 7 b r n e l o o p a o u t p o r t a , r 1 6 ; 关 a 口 d e c r 2 8 第七章 AVR 单片机的应用 7 12 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN b r e q s t ; r 2 8 为 0 转 r j m p s t a r t b ; 循环 d e l a y : l d i r 3 1 , 0 x 2 3 ; 延时子程序, 可修改时间常数 d e l a y 1 : d e c r 3 0 b r n e d e l a y 1 d e c r 3 1 b r n e d e l a y 1 d e c r 2 9 ; 移位速度次数 b r n e d e l a y r e t ; 子程序返回 ( 4 ) S L A V R 7 2 4 . A S M : 调节延时时间, 就可用 A V R 的 I / O 口发出 1 2 3 4 5 6 7 音符声, . i n c l u d e 8 5 1 5 d e f . i n c ; 器件配置文件 . o r g $ 0 0 0 0 r j m p R E S E T . o r g $ 0 0 1 0 R E S E T : l d i r 1 6 , 0 x 0 2 o u t s p h , r 1 6 l d i r 1 6 , 0 x 5 f o u t s p l , r 1 6 ; 设堆栈为 0 X 0 2 5 F l d i r 1 6 , 0 x f f ; 设口为输出状态 o u t d d r a , r 1 6 o u t d d r b , r 1 6 o u t d d r c , r 1 6 o u t d d r d , r 1 6 o u t p o r t a , r 1 6 ; 关口, 灭 L E D 灯 o u t p o r t b , r 1 6 o u t p o r t c , r 1 6 o u t p o r t d , r 1 6 l d i r 1 8 , 0 x 2 0 ; 设延时常数 l d i r 1 7 , 0 x 0 1 l d i r 1 9 , 0 x 6 0 l o o p : m o v r 1 6 , r 1 9 r c a l l d e l a y ; 调用延时子程序 e o r r 1 8 , r 1 7 ; 异或 o u t p o r t c , r 1 8 ; 输出 A T 9 0 S 8 5 1 5 的 C 口引脚 d e c r 2 0 ; - 1 b r n e l o o p ; R 2 0 不为 0 转, 为 0 顺执 s u b i r 1 9 , 0 x 0 5 ; R 1 9 减立即数 c p i r 1 9 , 0 x 1 f ; R 1 9 与立即数比 b r n e l o o p ; R 1 9 不 0 为转 R J M P R E S E T ; 循环 第七章 AVR 单片机的应用 7 13 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN d e l a y : p u s h r 1 6 ; 2 t 延时子程序 d e l a y 1 : d e c r 1 6 ; 1 t b r n e d e l a y 1 ; 1 t / 2 t p o p r 1 6 ; 2 t d e c r 1 6 ; 1 t b r n e d e l a y ; 1 t / 2 t r e t ; 4 t (5) SLAVR725.ASM:利用延时程序 I/O 口输出报警声 .include8515def.inc ; 器件配置文件 .org $0000 reset:ldi r16,$5f ;设堆栈 out spl,r16 ldi r16,$02 out sph,r16 ldi r18,0xff ;设口为输出 out ddrc,r18 ldi r19,0xf0 ;报警参数 lp: sbi portc,$00 ;开 pc 口 rcall delay ;延时 cbi portc,$00 ;关 pc 口 rcall delay dec r19 ;-1 brne lp ;r19 不为 0 转,为 0 顺执 rcall delay1 ;较长延时,不发声 rjmp lp ;循环报警 delay1:ldi r17,$40 ;延时子程序,报警声快慢调节$30-$60 rcall delay0 ret delay:ldi r17,$9 ;延时子程序,报警声频率可调$a-$7 rcall delay0 ret delay0: ;通用延时子程序略 . . . . . (6) SLAVR726.ASM:AT90S8515 的 PA 口使用建表方式的 LED 广告灯演示程序, .include8515def.inc ;器件配置文件 .org $0000 ;设置起始地址 .equ leddata=0x0250 rjmp reset .cseg .org $0010 RESET:ldi r16,$5f ;设置堆栈 out spl,r16 第七章 AVR 单片机的应用 7 14 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN ldi r16,$02 out sph,r16 ldi r16,$90 mov r15,r16 ser r16 ;设置 A 口为输出口 out ddra,r16 ;设置 A 口方向寄存器 L0:ldi zl,low(leddata*2) ldi zh,high(leddata*2) L1:lpm mov r16,r0 cpi r16,$0a breq L0 out porta,r16 rcall delay ;调用延时子程序 ld r0,z+ rjmp L1 DELAY: ;通用延时子程序从略 .cseg ; 设置 LED 广告灯数据表 .org leddata .db 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd .db 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd .db 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18 .db 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18 .db 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1 .db 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1 .db 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc .db 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc .db 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7 .db 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7 .db 0xff,0x00 .db 0xff,0x00 .db 0xff,0x00 .db 0xff,0x00 .db 0x0a,0x0a (7) SLAVR727.ASM : LED发光二极管加1计数程序 ; A T 9 0 S 8 5 1 5 的 P B P D 口设计成十六位二进制加 1 计数程序, 用 L E D 发光二极管显示 . i n c l u d e 8 5 1 5 d e f . i n c . o r g $ 0 0 0 0 ; 设置起始地址 A B : l d i r 1 6 , $ 5 f ; 设置堆栈 o u t s p l , r 1 6 l d i r 1 6 , $ 0 2 第七章 AVR 单片机的应用 7 15 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN o u t s p h , r 1 6 R E S E T : l d i r 1 8 , 0 x f f ; 设置 B 口, D 口为输出口 o u t d d r b , r 1 8 ; 设置 B 口, D 口方向寄存器 o u t d d r d , r 1 8 c l r r 0 c l r r 1 L 0 : m o v r 2 , r 0 m o v r 3 , r 1 c o m r 2 ; R 2 , R 3 取反 c o m r 3 o u t p o r t b , r 2 ; R 2 , R 3 数据送 B 口, D 口 o u t p o r t d , r 3 r c a l l d e l a y ; 调用延时子程序 i n c r 0 ; R 0 加 1 , 不为 0 跳转, 为 0 顺执 b r n e L 0 i n c r 1 b r n e L 0 d e c r 0 d e c r 1 L 1 : m o v r 2 , r 0 m o v r 3 , r 1 c o m r 2 ; R 2 , R 3 取反 c o m r 3 o u t p o r t b , r 2 ; R 2 , R 3 数据送 B 口, D 口 o u t p o r t d , r 3 r c a l l d e l a y ; 调用延时子程序 d e c r 0 ; R 0 减 1 , 不为 0 跳转, 为 0 顺执 b r n e L 1 d e c r 1 b r n e L 1 r j m p r e s e t D E L A Y : l d i r 1 8 , $ 0 1 ; 延时子程序 L 2 : d e c r 1 6 b r n e L 2 d e c r 1 7 b r n e L 2 d e c r 1 8 b r n e L 2 r e t 第七章 AVR 单片机的应用 7 16 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 7.3 综合程序 7 . 3 . A L E D / L C E / 键盘扫描综合程序源程序 源程序: S L A V R 7 3 A . A S M 综合程序功能如下: ( 1 ) . L E D 及 L C D 显示程序, 有自动识别 L E D 或 L C D 功能, 设 L C D 优先级高; ( 2 ) . 键盘扫描输入程序, 0 - F 为 1 6 个数字键; 还有上档命令键, E X E C - - 执行键; E 2 P R O M - - 读键; S R A M - - 读写键; M O N - - 返回初始状态键; L A S T - - 上一单元地址键; N E X T - - 下一单元地址键; S H I F T - - 转换上档命令键, 先按 S H I F T 键, 再按命令键, 就执行上档键的命令; / R S T - - 复位键, 执行程序后, 要机器回到初始化状态, 必须按复位键; ( 3 ) 按数字键显示对应数字, 并有小数点作为光标, 提示下一步工作位置, 按命令键( 先按 S H I F T ) 执行相应命令; ( 4 ) 对应功能入口地址( 地址数字后零可省) 0 0 7 0 H - 0 1 F F H 读写内部 S R A M ( 监控规定 S R A M 读写范围) 0 0 0 0 H - 0 1 F F H 读片内 E 2 P R O M 数据 0 2 0 0 H - 歌曲- 祝你生日快乐, 万水千山总是情 0 3 0 0 H - L E D 上 8 字循环显示 0 3 2 0 H - L E D 上 0 - F 字符循环显示 0 4 0 0 H - 逐次逼近法 A / D 转换( 需接网络电阻, 另见说明) 0 5 0 0 H - L C D 初始化程序 0 7 0 0 H - L C D 上尖头字符左右移位程序 0 7 4 0 H - L C D 上 0 - F 字符循环显示 0 8 0 0 H - L C D 显示 L C D 所有字符 程序清单见光盘文件 S L A V R 7 3 A . A S M 7.3. B LED键盘扫描综合程序 源程序: S L A V R 7 3 B . A S M 综合程序功能如下: ( 1 ) . 键盘扫描输入程序, 0 - F 为 1 6 个数字键; 还有上档命令键, E X E C - - 执行键; E 2 P R O M - - 读键; S R A M - - 读写键; M O N - - 返回初始状态键; L A S T - - 上一单元地址键; N E X T - - 下一单元地址键; S H I F T - - 转换上档命令键, 先按 S H I F T 键, 再按命令键, 就执行上档键的命令; / R S T - - 复位键, 执行程序后, 要机器回到初始化状态, 必须按复位键; ( 2 ) 按数字键显示对应数字, 并有小数点作为光标, 提示下一步工作位置, 按命令键( 先按 S H I F T ) 执行相应命令; ( 3 ) 对应功能入口地址( 地址数字后零可省) 0 0 7 0 H - 0 1 F F H 读写内部 S R A M ( 监控规定 S R A M 读写范围) 0 0 0 0 H - 0 1 F F H 读片内 E 2 P R O M 数据 0 2 0 0 H - 歌曲- 祝你生日快乐, 万水千山总是情 0 3 0 0 H - L E D 上 8 字循环显示 0 3 2 0 H - L E D 上 0 - F 字符循环显示 程序清单见光盘文件 S L A V R 7 3 B . A S M 第七章 AVR 单片机的应用 7 17 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 7.3.1 在SL-AVR开发实验器LED上实现字符8的循环移位显示程序 ; 源程序: S L A V R 7 3 1 . A S M ; 本程序在 S L - A V R 开发实验器上通过 ; 请你 1 . 如何修改字形; 2 . 改变字符个数, 二位或三位或一隔一显示; ; 3 . 改变字形移动方向; 4 . 改变字符移位速度; ; . i n c l u d e 8 5 1 5 d e f . i n c ; 器件配置文件 . d e f t e m p = r 1 6 ; 数据暂存器 . d e f s c n d p = r 2 2 ; L E D 显示位置暂存器 . o r g $ 0 0 0 0 r j m p r e s e t . o r g $ 0 3 0 r e s e t : l d i t e m p , l o w ( r a m e n d ) ; 设置堆栈指针 o u t s p l , t e m p l d i t e m p , h i g h ( r a m e n d ) o u t s p h , t e m p l d i t e m p , $ f f ; 设置 B D 口输出 o u t d d r b , t e m p o u t d d r d , t e m p o u t p o r t d , t e m p l d i t e m p , $ 7 f ; 字形 8 的代码为$ 7 F ( 可修改) o u t p o r t b , t e m p a g a i n : s e c ; 置进位位为 1 ( 低电平 L E D 亮, 高电平 L E D 灭) l d i s c n d p , 0 b 1 1 0 1 1 1 1 1 ; 扫描显示 S C A N D P ( 可修改) r o u t e : o u t p o r t d , s c n d p ; 从 L E D 最左一位( D 5 ) 右移( 可修改) l d i t e m p , $ 4 0 ; 设置延时常数( 可修改) r c a l l d e l a y ; 调用延时 r o r s c n d p ; 右循环( 可修改) 第七章 AVR 单片机的应用 7 18 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN b r c c a g a i n ; 显示下一位 r j m p r o u t e ; 循环显示 d e l a y : ; 通用延时子程序略 7 . 3 . 2 电脑放音机 源程序: S L A V R 7 3 2 . A S M A V R 单片机在儿童智能玩具中的应用- - 音乐玩具 利用单片机开发儿童智力玩具大有作为, 尤其单片机扩展存贮器方便,而大容量存贮器价格也很低, 6 4 K B 的 E P R O M 可存放 3 0 0 多首歌曲, 8 M 位 E P R O M 可存放 5 0 0 0多首歌曲, 几个芯片就可组成一个音乐库, 这是用其它方法难办的 利用 A V R单片机产生乐曲音符, 再把乐谱翻译成计算机音乐语言,由单片机进行信息处理, 再经过信号放大, 由耳机或喇叭放出乐曲声.由于音符和节拍是由计算机产生的, 所以发音音符和节拍准确, 可见音乐从娃娃开始抓起,音乐玩具是儿童笫一个好老师利用单片机的中断, I / O口控制功能,可以做到电脑放音机有自动连续放音功能, 乐曲全部放完自动从头开始连续放音, 循环不断 如何产生音乐频率: 1 . 要产生音频脉冲, 只要算出某一音频的周期( 1 / 频率) , 然后将此周期除以 2 ,即为半周期的时间, 然后利用计时器计时此半周期时间, 每当计时到后就将输出脉冲对 I / O口反相, 然后重复计时此半周期时间再对 I / O 口反相, 如此就可在 I / O口引脚上得到此频率的脉冲( 程序驱动 I / O口反相, 即正负各半周期为一个周期, 才能使喇叭”吸放”发声) ; 2 . 利用 A V R 单片机的内部计时器让其工作在计数模式 M O D E 1 ( 1 6位定时计数器) 下, 改变计数值T C N T 1 H 及 T C N T 1 L 以产生不同的频率; 3 . 例如以 6 M H Z晶振为例: 要产生频率为 5 2 3 H Z , 其周期 T = 1 / 5 2 3 = 1 9 1 2 u s ,其半周期为1 9 1 2 / 2 = 9 5 6 u s , 因此只要令计数器计时 9 5 6 u s / 1 u s = 9 5 6 ( 为半周期) . 所以在每计数 9 5 6次时将 I / O反相, 就可得到中音 D O ( 5 2 3 H Z ) . 计数脉冲值与频率的关系公式如下: N = F i ( 6 M H z 晶振, C P U 产生的频率) 2 ( 半周期) F r N : 计数值 F i : 以 6 M H Z 晶振为例, 内部计时( 数) 一次需 2 u s , 频率单位为 1 周期/ 秒, 即 H Z 1 周期/ 2 u s = 1 周期/ 2 X 1 0- 6秒= 5 0 0 0 0 0 次/ 秒= 5 0 0 0 0 0 H Z 故其频率为 5 0 0 0 0 0 H Z F r : 要产生的频率 4 . 其计数值的求法如下: T ( 1 6位计数器计多少后溢出) = 6 5 5 3 6 ( 1 6位二进制计数器, 计满数溢出时的计数值为 2的 1 6次方) - N = 6 5 5 3 6 - F i / 2 / F r 例如: 求低音 D O ( 2 6 2 H Z ) , 中音 D O ( 5 2 3 H Z ) , 高音 D O ( 1 0 4 6 H Z ) 的计数值? 设 K = 6 5 5 3 5 F = 5 0 0 0 0 0 = F i = 0 . 5 M H Z T = 6 5 5 3 6 - N = 6 5 5 3 6 - F i / 2 / F r = 6 5 5 3 6 - 5 0 0 0 0 0 / 2 / F r = 6 5 5 3 6 - 2 5 0 0 0 0 / F r 低音 D O 的 T = 6 5 5 3 5 - 1 9 0 8 = 6 3 6 2 7 ( 十进制数) 中音 D O 的 T = 6 5 5 3 5 - 0 9 5 6 = 6 4 5 7 9 ( 十进制数) 高音 D O 的 T = 6 5 5 3 5 - 0 4 7 8 = 6 5 0 5 7 ( 十进制数) 第七章 AVR 单片机的应用 7 19 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 5 . C 调各音符频率与计数值 T 的对照表: 音符 频率 H Z 半周期 T C N T 值 音符 频率 H Z 半周期 T C N T 值 低 1 D O 2 6 2 1 9 0 8 S 6 3 6 2 7 # 4 F A # 7 4 0 0 6 7 6 S 6 4 8 5 9 # 1 D O # 2 7 7 1 8 0 5 6 3 7 3 0 中 5 S O 7 8 4 0 6 3 8 6 4 8 9 7 低 2 R E 2 9 4 1 7 0 0 6 3 8 3 5 # 5 S O # 8 3 1 0 6 0 2 6 4 9 3 3 # 2 R E # 3 1 1 1 6 0 8 6 3 9 2 7 中 6 L A 8 8 0 0 5 6 8 6 4 9 6 7 低 3 M 3 3 0 1 5 1 6 6 4 0 2 0 # 6 L A # 9 3 2 0 5 3 6 6 4 9 9 9 低 4 F A 3 4 9 1 4 3 3 6 4 0 1 2 中 7 S I 9 8 8 0 5 0 6 6 5 0 2 9 # 4 F A # 3 7 0 1 3 5 0 6 4 1 8 5 高 1 D O 1 0 4 6 0 4 7 8 6 5 0 5 7 低 5 S O 3 9 2 1 2 7 6 6 4 2 5 9 # D O # 1 1 0 9 0 4 5 1 6 5 0 8 4 # 5 S O # 4 1 5 1 2 0 5 6 4 3 3 0 高 2 R E 1 1 7 5 0 4 2 6 6 5 1 0 9 低 6 L A 4 4 0 1 1 3 6 6 4 3 9 9 # 2 R E # 1 2 4 5 0 4 0 2 6 5 1 3 3 # 6 L A # 4 6 6 1 0 7 2 6 4 4 6 3 高 3 M 1 3 1 8 0 3 7 2 6 5 1 5 6 低 7 S I 4 9 4 1 0 1 2 6 4 5 2 3 高 4 F A 1 3 9 7 0 3 5 8 6 5 1 7 7 中 1 D O 5 2 3 0 9 5 6 6 4 5 7 9 # 4 F A # 1 4 8 0 0 3 3 8 6 5 1 9 7 # 1 D O # 5 5 4 0 9 0 3 6 4 6 3 2 高 5 S O 1 5 6 8 0 3 1 9 6 5 2 1 6 中 2 R E 5 7 8 0 8 4 2 6 4 6 8 3 # 5 S 0 # 1 6 6 1 0 2 9 2 6 5 2 4 3 # 2 R E # 6 2 2 0 8 0 4 6 4 7 3 1 高 6 L A 1 7 6 0 0 2 8 4 6 5 2 5 1 中 3 M 6 5 9 0 7 5 9 6 4 7 7 6 # 6 L A # 1 8 6 5 0 2 6 8 6 5 2 6 7 中 4 F A 6 9 8 0 7 1 6 6 4 8 1 9 高 7 S I 1 9 7 6 0 2 5 3 6 5 2 8 2 # 表示半音, 用于上升或下降半个音 如何产生节拍: 每个音符使用 1 个字节, 每个节拍使用 1 个字节, A V R程序存储器可以设为 1 6 位, 即 1 个字, 或称双字节, 所以一个字的高 8 位存放音符码, 低 8 位存放节拍码如果 1 拍节为 0 . 4秒则 1 / 4拍是0 . 1 秒, 只要设定延迟时间就可求得节拍的时间, 我们假设 1 / 4 拍为 1 D E L Y 单位, 则 1 拍应为 4 个D E L Y , 以此类推, 只要求得 1 / 4 拍的 D E L Y单位时间, 其余的节拍就是它的倍数. 1 / 4 拍的延迟时间= 1 8 7 亳秒 节拍与节拍码对照表 节拍码 节拍数( 拍) 节拍码 节拍数( 拍) 1 1 / 4 1 1 / 8 2 2 / 4 2 1 / 4 3 3 / 4 3 3 / 8 4 1 4 1 / 2 5 1 又 1 / 4 5 5 / 8 6 1 又 1 / 2 6 3 / 4 8 2 8 1 1 0 2 又 1 / 2 1 0 1 又 1 / 4 1 2 3 1 2 1 又 1 / 2 1 6 1 又 3 / 4 建立音乐的步骤: 找出乐曲,然后对照音符表, 翻译出乐曲码, 用程序伪指令 D B输入曲码和节拍码; 也可直接第七章 AVR 单片机的应用 7 20 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 在调试窗口的程序存储器窗口$ 0 1 0 0 地址输入曲码和节拍码( 只适用于在线实时仿真器) 例: 音符表练习, 1 . 把简谱翻译成曲码代码; 以下音符均设为一拍, 代码为 4 1 2 3 4 5 6 7( 低八度音)1 2 3 4 5 6 7 ( 中音) 1( 高音) 1( 高音) 7 6 5 4 3 2 1( 中音) 7 6 5 4 3 2 1( 低八度音) 曲码 1 3 5 6 8 1 0 1 2 1 3 1 5 1 7 1 8 2 0 2 2 2 4 2 5 简码 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 低八度音 中 音 高音 曲码 3 6 3 4 3 2 3 0 2 9 2 7 2 5 2 4 2 2 2 0 1 8 1 7 1 5 1 3 1 2 简码 7 6 5 4 3 2 1 7 6 5 4 3 2 1 7 高八度音 中 音 低音 最后翻译成乐曲加节拍代码为: 0 1 , 0 4 , 0 3 , 0 4 , 0 5 , 0 4 , 0 6 , 0 4 , 0 8 , 0 4 . 1 0 , 0 4 , 1 2 , 0 4 , 1 3 , 0 4 , 1 3 , 0 4 , 1 5 , 0 4 , 1 7 , 0 4 , 1 8 , 0 4 , 2 0 , 0 4 , 2 2 , 0 4 , 2 4 , 0 4 , 2 5 , 0 4 , 2 5 , 0 4 , 3 6 , 0 4 , 3 4 , 0 4 , 3 2 , 0 4 , 3 0 , 0 4 , 3 0 , 0 4 , 2 9 , 0 4 , 2 7 , 0 4 , 2 5 , 0 4 , 2 4 , 0 4 , 2 2 , 0 4 , 2 0 , 0 4 , 1 8 , 0 4 , 1 7 , 0 4 , 1 5 , 0 4 , 1 3 , 0 4 , 1 2 , 0 4 以上乐曲数据用伪指令 D B 方式输入”乐曲. A S M ”的$ 0 1 0 0 地址, 再汇编一次就可下载试听, 注意:音符节拍间用逗号隔开, 不要不小心键入小数点, 因为逗号键右边是小数点键, 键入小数点, 程序汇编时将造成计算机死机! 0 0 0 0 ( 4 个零为所有曲结束标志) 1 . 把乐曲代码输入计算机 把 S L - A V R实验器与 P C机连机, U 4 插上 A T 9 0 S 8 5 1 5芯片, 插上音响器短路块, 开机通电进入A V R 下载窗口, 进行下载操作, 下载结束应能听到乐曲声 ;* 乐曲程序 SLAVR732.ASM * ;* 标题:AT90S8515 C口输出乐曲声电脑放音机 ;* 版本: 1.0 ;* 最后更新日期: 2000.08.08 ;* 支援 E-mail: gzsl ;* 描述 ;* 用 SL-AVR 万用下载开发实验器做样机,在 AT90S8515 的 C 口接喇叭发出乐曲声, ;* 请你把最喜爰的乐曲送入单片机! 起始地址为$0100,也可把曲码节拍码在调试窗口中的 ;* 程序存储器窗口(Program Memory)内,从$0100 地址, ;* 用键盘直接输入乐曲(仅适合 ICE-200 实时仿真器) ;* 作者: SL. ;*程序适用于所有单片机 ;* .include8515def.inc ;文件头 AT90S8515 器件配置文件,不同的器件有不同的器件配置文件 rjmp RESET ;AVR 重新定位 .def TEMPDH =r2 ;寄存器定义 .def TEMPDL =r3 .def CNT =r10 第七章 AVR 单片机的应用 7 21 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN .def SCNN =r11 .def KEYN =r12 .def SCNK =r13 .def SCNDP =r14 .def KSNI =r15 .def TEMP =r16 ;数据暂存器 .def TEMP1 =r17 .def TEMP2 =r18 .def TEMP3 =r19 .def SCNTT =r26 ; .def MUSN =r22 ;输出乐曲声暂存器 .def TONL =r21 ;节拍码低位 .def TONH =r20 ;节拍码高位 .def PLYTON =r25 ;存乐曲码 .def TONSET =r24 .def TONLNG =r23 ;存节拍码 .cseg .org 0x06 ;TIM1_OVF 定时器 1 溢出中断处理入口地址 intt1: RJMP OUTPM ;转定时器 1 溢出中断处理,发音周期到,则跳转到发音输出态 .cseg .org 0x010 ; 定时器 1 溢出中断处理程序,发音起始地址 ;发音周期到重新装入计时值并将输出到 PORTC 口 OUTPM: OUT TCNT1H,TONH ;重新将 TONH 新计时值载入 TCNT1H 内 OUT TCNT1L,TONL ; 重新将 TONL 新计时值载入 TCNT1L 内 SBIS PORTC,00 ;先检测 PORTC 口是否为 1 而跳转 RJMP SETOP1 ;若是 PORTC 口为 0 则跳到 SETOP1 令 PORTC 口转为 1 SETOP0: CBI PORTC,00 ;若 PORTC 为 1 则令 PORTC 转为 0 LDI MUSN,$00 ;同时令 MUSN 为 00 值 RETI ;回中断前主程序并令可再次中断返回 SETOP1: SBI PORTC,00 ;若 PORTC 为 0 则令 PORTC 转为 1 LDI MUSN,$01 ;同时令 MUSN 为 01 值 RETI ; 回中断前主程序并令可再次中断返回 .cseg .org 0x020 ;主程序起始地址,必须跳过中断区 RESET: ldi temp,low(RAMEND) ;RAMEND 为 8515def.inc 内建值为 025FH out SPL,temp ;启始堆栈指针低位将 TEMP=02H 放入 SP=3DH ;若硬件堆栈或者片 AVR 片内含 SRAM 小于 256B 时,下列二行程序可省略, ldi temp,high(RAMEND) ;以 TEMP=R16 1 1 1 1 0 1 1 1 移位以进行下一行按键扫描 N O S K : S E C ; 令进位标志 C F = 1 R O R S C N D P ; 将扫描显示码 S C N D P 左移作下一位扫描 D E C C N T ; 共需作 6 位数扫描显示故 C N T 减 1 B R N E C O L 1 ; C N T 减 1 不为 0 则跳回 C O L 1 再作扫描显示及读取键盘输入 L D I T E M P , $ F F ; 若已完成全部扫描显示和读取按键则令 T E M P = 0 f f O U T D D R C , T E M P ; T E M P 输出到 D D R C 设定 P O R T C 为输出驱动 L E D O U T P O R T C , T E M P P O P T E M P ; 出栈 P O P T E M P 1 P O P T E M P 2 P O P T E M P 3 P O P X L P O P X H R E T ; 子程序返回 第七章 AVR 单片机的应用 7 28 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 7.3.4 十进制计数显示 源程序: S L A V R 7 3 4 . A S M 应用例子* . A S M , 必须编译生成* . O B J文件才可调试, 如要修改* . A S M , 必须修改文件属性, 去掉* . A S M 只读文件属性 必须按下图接线才能正常工作! ; * * * * * * * * * * * * * * * * * * * * * 十进制计数程序 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * 标题: 用二位 L E D 显示十进制计数 ; * 版本: 1 . 0 ; * 最后更新日期: 2 0 0 0 . 0 8 . 0 8 ; * 支援 E - m a i l : g z s l s l . c o m . c n ; * 描述 ; * 用 A V R A T 9 0 S 1 2 0 0 的 D 口接二只 L E D 数目管, P B 7 , P B 6 作片选, 硬件设定 D 口高电平 L E D 灯 ; * 亮, B 口低电平选中 L E D , 即选用共阴极数目管, 最大显示十进制 9 9 硬件接线原理图如下: ; * 作者: S L . Z ; * 程序适用于所有单片机 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * . i n c l u d e 1 2 0 0 d e f . i n c ; A T 9 0 S 1 2 0 0 配置文件 . o r g $ 0 0 0 0 r j m p r e s e t . o r g $ 0 0 1 0 r e s e t : l d i r 2 0 , $ f f ; 设 B 口D 口为输出 o u t d d r b , r 2 0 ; B 口方向寄存器 o u t d d r d , r 2 0 ; D 口方向寄存器 s b i $ 1 8 , 7 ; 硬件设定 B 口低电平选中 L E D , P B . 7 关高位 L E D , s b i $ 1 8 , 6 ; P B . 6 关低位 L E D l d i r 2 0 , $ f e ; 建字形表 m o v r 0 , r 2 0 ; 0 l d i r 2 0 , $ b 0 m o v r 1 , r 2 0 ; 1 第七章 AVR 单片机的应用 7 29 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN l d i r 2 0 , $ e d m o v r 2 , r 2 0 ; 2 l d i r 2 0 , $ f 9 m o v r 3 , r 2 0 ; 3 l d i r 2 0 , $ b 3 m o v r 4 , r 2 0 ; 4 l d i r 2 0 , $ d b m o v r 5 , r 2 0 ; 5 l d i r 2 0 , $ d f m o v r 6 , r 2 0 ; 6 l d i r 2 0 , $ f 0 m o v r 7 , r 2 0 ; 7 l d i r 2 0 , $ f f m o v r 8 , r 2 0 ; 8 l d i r 2 0 , $ f 3 m o v r 9 , r 2 0 ; 9 l d i r 2 0 , $ f 7 m o v r 1 0 , r 2 0 ; A l d i r 2 0 , $ 9 f m o v r 1 1 , r 2 0 ; B l d i r 2 0 , $ c e m o v r 1 2 , r 2 0 ; C l d i r 2 0 , $ b d m o v r 1 3 , r 2 0 ; D l d i r 2 0 , $ c f m o v r 1 4 , r 2 0 ; E l d i r 2 0 , $ c 7 m o v r 1 5 , r 2 0 ; F b c l r 7 ; 清 I 标志, 关中断 第七章 AVR 单片机的应用 7 30 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN c l r r 2 8 ; ( 2 8 ) = $ 0 0 m a i n : l d i r 2 0 , $ 2 8 ; 扫描次数 s t a r t : m o v r 3 0 , r 2 8 ; 十位显示字符值, 第一次显示 0 d i s p l a y : a n d i r 3 0 , $ f 0 ; 取十位 s w a p r 3 0 ; 半字节交换, 获取 Z 地址 l e d h : l d r 2 5 , z ; L E D 高位, 复位后( R 3 1 ) = $ 0 0 o u t p o r t d , r 2 5 ; 送 D 口显示 s b i $ 1 8 , 6 ; 关个位, 硬件设定高电平不亮 c b i $ 1 8 , 7 ; 选通十位, 硬件设定低电平亮 l d i r 2 7 , $ 1 0 ; 延时常数 d e l a y 1 : d e c r 2 6 ; - 1 , 延时 b r n e d e l a y 1 ; 不为 0 转 d e c r 2 7 ; - 1 , 延时 b r n e d e l a y 1 ; 不为 0 转 s b i $ 1 8 , 7 ; 关十位 n o p m o v r 3 0 , r 2 8 ; 个位显示字符值, 第一次显示 0 a n d i r 3 0 , $ 0 f ; 取个位 l e d l : l d r 2 5 , z ; 荻显示字符 o u t p o r t d , r 2 5 ; 送 D 口显示 s b i $ 1 8 , 7 ; 关十位, 硬件设定高电平不亮 c b i $ 1 8 , 6 ; 选通个位, 硬件设定低电平亮 l d i r 2 7 , $ 1 0 ; 延时常数 d e l a y 2 : d e c r 2 6 ; - 1 , 延时 b r n e d e l a y 2 ; 不为 0 转 d e c r 2 7 ; - 1 , 延时 b r n e d e l a y 2 ; 不为 0 转 s b i $ 1 8 , 6 ; 关个位 n o p d e c r 2 0 ; 显示数- 1 b r n e s t a r t ; ( R 2 0 ) 不为 0 转, i n c r 2 8 ; + 1 r j m p m a i n ; 返回主程序 7.3.5 廉价的 A/D 转换器 源程序: S L A V R 7 3 5 . A S M 必须按下图接线才能正常工作! A V R 单片机的 A T 9 0 系列片内置有模拟比较器这一节介绍用 A T 9 0 S 1 2 0 0 单片机实现廉价 A / D转换器 一硬件设计 使用 A V R 单片机及一个外部电阻和一个外部电容器设计成一个 A / D转换器, 并使用片内的定时器/计数器中断和模拟比较器中断 采用 R C 模拟转换原理 这程转方法在精确度和转换时间的花费上是较低的, 适用一般要求不高的场合硬件连接如图 6 . 1 第七章 AVR 单片机的应用 7 31 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 二软件编程 ( 源程序为: 模拟比较 A D . A S M ) ; * * * * * * * * * * * * * * * * * * * A V R 单片机实用实验程序 * * * * * * * * * * * * * * * * * * * * * * * * ; * 标题: 廉价的 A / D 转换器 ; * 版本: 1 . 0 ; * 最后更新日期: 2 0 0 0 . 0 8 . 0 8 ; * ; * 支援 E - m a i l : g z s l s l . c o m . c n ; * 描述 ; * 用 A V R S t u d i o 调试软件窗口观察指令执行变化情况 ; * 作者: S L . Z ; * 程序适用于所有 A T 9 0 S 系列单片机 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * 硬件电路及说明阅 一文 ; * 本程序实测调试通过 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * . i n c l u d e 1 2 0 0 d e f . i n c ; 应用器件配置文件, * . A S M 所在文件夹中不能缺, 不然汇编出错提示 . o r g $ 0 0 0 0 r j m p r e s e t ; 复位处理 . o r g $ 0 0 0 2 ; E X T _ I N T 0 外部中断入口地址 r j m p i n t e r ; 转 T 0 溢出中断服务程序 . o r g $ 0 0 0 3 ; T I M I _ C A P T 定时器外部中断入口地址 r j m p i n t e r ; 转模拟比较器处理中断服务程序 . o r g $ 0 0 1 0 ; 主程序 r e s e t : l d i r 2 0 , $ f f ; 设置 D 口为输出 o u t d d r d , r 2 0 ; 送 D 口方向寄存器 第七章 AVR 单片机的应用 7 32 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN s b i $ 1 8 , 7 ; 置 I / O 寄存器 P O R T B 的 7 位, L E D 数目管十位片选 s b i $ 1 8 , 6 ; 置 I / O 寄存器 P O R T B 的 6 位, 数目管个位片选 l d i r 2 0 , $ f e ; R 0 - R 1 5 存放显示字符. 见表 6 . 1 m o v r 0 , r 2 0 ; 0 l d i r 2 0 , $ b 0 m o v r 1 , r 2 0 ; 1 l d i r 2 0 , $ e d m o v r 2 , r 2 0 ; 2 l d i r 2 0 , $ f 9 m o v r 3 , r 2 0 ; 3 l d i r 2 0 , $ b 3 m o v r 4 , r 2 0 ; 4 l d i r 2 0 , $ d b m o v r 5 , r 2 0 ; 5 l d i r 2 0 , $ d f m o v r 6 , r 2 0 ; 6 7 l d i r 2 0 , $ f 0 m o v r 7 , r 2 0 ; 7 l d i r 2 0 , $ f f m o v r 8 , r 2 0 ; 8 l d i r 2 0 , $ f 3 m o v r 9 , r 2 0 ; 9 l d i r 2 0 , $ f 7 m o v r 1 0 , r 2 0 ; A l d i r 2 0 , $ 9 f m o v r 1 1 , r 2 0 ; B l d i r 2 0 , $ c e m o v r 1 2 , r 2 0 ; C l d i r 2 0 , $ b d 第七章 AVR 单片机的应用 7 33 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN m o v r 1 3 , r 2 0 ; D l d i r 2 0 , $ c f m o v r 1 4 , r 2 0 ; E l d i r 2 0 , $ c 7 m o v r 1 5 , r 2 0 ; F m a i n : r c a l l c o n i n i ; 初始化 A / D 转换器 s e i ; 开中断 l d i r 1 6 , $ f c ; 置 B 口为输出, P B . 0 , P B . 1 为输入, 0 B 1 1 1 1 1 1 0 0 o u t d d r b , r 1 6 d d e l a y : c l r r 1 6 ; 延时, 清暂存计数器 1 l d i r 1 7 , $ f 1 ; 复位暂存计数器 2 l o o p : i n c r 1 6 ; 清暂存计数器 1 , 加 1 计数 b r n e l o o p ; 检查暂存计数器 1 不为 0 转, 为 0 顺执 i n c r 1 7 ; 清暂存计数器 2 , 加 1 计数 b r n e l o o p ; 检查暂存计数器 2 不为 0 转, 为 0 顺执 r c a l l a d c o n v ; 调用启动转换器 w a i t : b r t c w a i t ; 等待中断, 标志被清零转移, 为 1 顺执 c l t ; 清 T 标志 r c a l l f e t c h ; 调用取显示 l d i r 2 0 , $ 3 8 ; 反复显示次数 s t a r t : m o v r 3 0 , r 2 8 ; R 2 8 送 Z 寄存器低位 d i s p l a y : a n d i r 3 0 , $ f 0 ; 显示高位, 与, 即屏蔽高位, s w a p r 3 0 ; 交换半字节, 取得高位数据地址 l e d h : l d r 2 5 , z ; 取 L E D 高位数据 o u t p o r t d , r 2 5 ; 高位显示送 D 口 s b i $ 1 8 , 6 ; 置位, 关低位 L E D 显示, c b i $ 1 8 , 7 ; 清零, 硬件设定低电平选中高位 L E D l d i r 2 7 , $ 1 0 ; 延时常数$ 1 0 d e l a y 1 : d e c r 2 6 ; 延时 b r n e d e l a y 1 d e c r 2 7 b r n e d e l a y 1 s b i $ 1 8 , 7 ; 置位, 关高位 L E D n o p m o v r 3 0 , r 2 8 ; 显示低位 a n d i r 3 0 , $ 0 f l e d l : l d r 2 5 , z o u t p o r t d , r 2 5 s b i $ 1 8 , 7 ; 置位, 关高位 L E D 显示, c b i $ 1 8 , 6 ; 清零, 硬件设定低电平 L E D 亮, l d i r 2 7 , $ 1 0 ; 延时常数$ 1 0 d e l a y 2 : d e c r 2 6 ; 延时 b r n e d e l a y 2 第七章 AVR 单片机的应用 7 34 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN d e c r 2 7 b r n e d e l a y 2 s b i $ 1 8 , 6 ; 关低位 L E D n o p d e c r 2 0 ; - 1 , b r n e s t a r t ; 不为 0 转, 原( R 2 0 ) = $ 3 8 即扫描显示 3 8 次 r j m p m a i n ; 返回主程序 i n t e r : i n r 2 8 , t c n t 0 ; 中断服务程序 c l r r 1 6 ; 关闭 T 0 c l i o u t t c c r 0 , r 1 6 c b i p o r t b , 5 s e t r e t i c o n i n i : l d i r 1 6 , $ 0 b ; o u t a c s r , r 1 6 l d i r 1 6 , $ 0 2 o u t t i m s k , r 1 6 c b i p o r t b , 5 r e t a d c o n v : l d i r 1 6 , $ 4 0 ; o u t t c n t 0 , r 1 6 c l t l d i r 1 6 , $ 0 2 o u t t c c r 0 , r 1 6 s b i p o r t b , 5 r e t f e t c h : m o v r 1 8 , r 2 8 ; 取显示 s w a p r 1 8 ; 半字节交换 a n d i r 1 8 , $ 0 f ; 与, 屏蔽低位 d e c r 1 8 ; - 1 d e c r 1 8 d e c r 1 8 d e c r 1 8 b r n e l 5 0 ; R 1 8 不为 0 转 m o v r 1 8 , r 2 8 ; a n d i r 1 8 , $ 0 f ; 与, 屏蔽低位 r j m p f e e l 5 0 : d e c r 1 8 ; b r n e l 6 0 m o v r 1 8 , r 2 8 第七章 AVR 单片机的应用 7 35 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN a n d i r 1 8 , $ 0 f o r i r 1 8 , $ 1 0 r j m p f e e l 6 0 : d e c r 1 8 ; b r n e l 7 0 m o v r 1 8 , r 2 8 a n d i r 1 8 , $ 0 f o r i r 1 8 , $ 2 0 r j m p f e e l 7 0 : d e c r 1 8 ; - 1 b r n e l 8 0 ; 不为 0 转, 为 0 顺执 m o v r 1 8 , r 2 8 a n d i r 1 8 , $ 0 f ; 与 o r i r 1 8 , $ 3 0 ; 或 r j m p f e e l 8 0 : l d i r 2 8 , $ f f ; ( R 2 8 ) = $ F F r e t f e e : c b i e e c r , 0 ; 清 I / O 寄存器 E E P R O M 控制寄存器 E E C R 的 0 位, 设为读操作 o u t e e a r , r 1 8 ; R 1 8 送 E E P R O M 地址口, 输出地址 s b i e e c r , 0 ; 置位 I / O 寄存器 E E P R O M 控制寄存器的 0 位, 读选通 i n r 2 8 , e e d r ; 荻得数据, E E P R O M 数据寄存器内容送 R 2 8 r e t . e s e g . o r g $ 0 0 0 0 ; E E P R O M 数据地址首址 . d b 0 x 0 0 , 0 x 0 0 , 0 x 0 3 , 0 x 1 4 , 0 x 2 1 , 0 x 2 5 , 0 x 2 f , 0 x 3 3 . d b 0 x 3 8 , 0 x 3 f , 0 x 4 7 , 0 x 5 2 , 0 x 5 9 , 0 x 6 a , 0 x 7 8 , 0 x 7 d . d b 0 x 8 1 , 0 x 8 6 , 0 x 8 b , 0 x 9 0 , 0 x 9 a , 0 x 9 f , 0 x a 4 , 0 x a 7 . d b 0 x a c , 0 x a f , 0 x b e , 0 x c 5 , 0 x c 9 , 0 x c a , 0 x c e , 0 x d 0 . d b 0 x d 3 , 0 x d 5 , 0 x d 7 , 0 x d 9 , 0 x d a , 0 x d f , 0 x e 0 , 0 x e 1 . d b 0 x e 2 , 0 x e 3 , 0 x e 4 , 0 x e 5 , 0 x e 6 , 0 x e 8 , 0 x e 9 , 0 x e c . d b 0 x e d , 0 x e e , 0 x e f , 0 x f 0 , 0 x f 3 , 0 x f 4 , 0 x f 5 , 0 x f 6 . d b 0 x f 8 , 0 x f 9 , 0 x f a , 0 x f c , 0 x f f , 0 x f f , 0 x f f , 0 x f f 第七章 AVR 单片机的应用 7 36 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 7 . 3 . 6 高精度廉价的 A / D转换器 - 用网络电阻组成的高精度 A/D 转换器 源程序: S L A V R 7 3 6 . A S M 必须按下图接线才能正常工作! ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * A V R 单片机实用程序 * * * * * * * * * * * * * * * * * * * * * * * * ; * 标题: 高精度廉位的 A / D 转换器 ; * 版本: 1 . 0 ; * 最后更新日期: 2 0 0 0 . 0 8 . 0 8 ; * 支援 E - m a i l : g z s l s l . c o m . c n ; * 描述 ; * 用网络电阻实现高精度廉位的 A / D 转换, 本程序实测调试通过 ; * 作者: S L . Z ; * 程序适用于所有单片机 . i n c l u d e 8 5 1 5 d e f . i n c ; 器件配置文件 . o r g $ 0 0 0 0 r j m p r e s e t . d e f t e m p = r 1 6 . d e f t e m p 1 = r 1 7 . e q u l a b e l = $ 0 1 0 0 ; 字型表首址 . o r g $ 0 0 1 0 r e s e t : l d i r 2 0 , $ 0 2 ; 设堆栈指针 o u t s p h , r 2 0 o u t s p l , r 2 0 l d i r 2 0 , $ f f ; 设置 D 口C 口为输出 o u t d d r d , r 2 0 o u t d d r c , r 2 0 l d i r 2 0 , $ f 0 ; 设 P B 7 P B 4 为输出, P B 3 P B 0 为输入 o u t d d r b , r 2 0 o u t p o r t b , r 2 0 c l r r 2 0 ; 清 C 口 o u t p o r t c , r 2 0 第七章 AVR 单片机的应用 7 37 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN s b i $ 1 8 , 7 ; 关显示, 硬件设定片选 L E D 数目管低电平亮, 高电平关 s b i $ 1 8 , 6 c l i ; 关中断 l d i z h , h i g h ( l a b e l * 2 ) ; m a i n : l d i t e m p , $ 0 0 n o p l o o p 1 : o u t p o r t c , t e m p n o p n o p n o p i n t e m p 1 , a c s r ; 读模拟比较器控制和状态寄存器 s b r s t e m p 1 , 5 r j m p n a c o ; 模拟比较器输出为 0 转 r j m p h a c o ; 模拟比较器输出为 1 转 n a c o : i n c t e m p ; + 1 b r n e l o o p 1 ; 不为 0 转 l d i t e m p , $ f f h a c o : m o v r 2 8 , t e m p ; 暂存 l d i r 2 0 , $ 3 8 d i s p l a y : m o v t e m p , r 2 8 ; 显示十位字型 a n d i t e m p , $ f 0 s w a p t e m p c l r z l a d d z l , t e m p l e d h : l p m ; 取十位字型 o u t p o r t d , r 0 s b i $ 1 8 , 6 ; 关 P B . 6 硬件设定片选 L E D 数目管高电平关, 低电平开( 灯亮) c b i $ 1 8 , 7 ; 开 P B . 7 r c a l l d e l a y m o v t e m p , r 2 8 ; 显示个位 a n d i t e m p , $ 0 f c l r z l l e d l : a d d z l , t e m p l p m ; 取个位字型 o u t p o r t d , r 0 s b i $ 1 8 , 7 ; 关 P B . 7 硬件设定片选 L E D 数目管高电平关, 低电平开( 灯亮) c b i $ 1 8 , 6 ; 开 P B . 6 r c a l l d e l a y ; 调用延时 d e c r 2 0 b r n e d i s p l a y r j m p m a i n d e l a y : l d i r 2 7 , $ 1 0 ; 延时子程序 d e l a y 1 : d e c r 2 6 b r n e d e l a y 1 第七章 AVR 单片机的应用 7 38 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN d e c r 2 7 b r n e d e l a y 1 s b i $ 1 8 , 7 ; 关 P B . 7 r e t ; 子程序返回 . c s e g . o r g $ 0 1 0 0 ; 字型表首址 . d w 0 x b 0 f e , 0 x f 9 e d , 0 x d b b 3 , 0 x f 0 d f . d w 0 x f 3 f f , 0 x 9 f f 7 , 0 x b d c e , 0 x c 7 c f 7.3.7 星星灯 源程序: S L A V R 7 3 7 . A S M 用 A V R 单片机 8 位数据产生随机数, 由 P O R T A 口及 P O R T C 口输出随机数, 在 8 X 8 L E D上显示,硬件接线电路见7 . 3 . 8 按钮猜数随机数的种子由程序设定( 也可外接开关设定) , 启动种子后,由移位寄存器以互斥的异或逻辑组合返回循环产生 . i n c l u d e 8 5 1 5 d e f . i n c r j m p R E S E T . d e f t e m p = r 1 6 ; 暂存器 . d e f t e m p 1 = r 1 7 ; 暂存器 1 . d e f u d a t a = r 2 1 ; 存随机数送 A 口 . d e f d d a t a = r 2 2 ; 存随机数送 C 口 . c s e g . o r g 0 x 1 0 R E S E T : l d i t e m p , h i g h ( R A M E N D ) ; 设堆栈指针 o u t S P H , t e m p l d i t e m p , l o w ( R A M E N D ) o u t S P L , t e m p 第七章 AVR 单片机的应用 7 39 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN l d i t e m p , 0 x f f ; 设 A 口C 口为输出 o u t d d r a , t e m p ; 送方向寄存器 A o u t d d r c , t e m p ; 送方向寄存器 C s t a r t : w d r ; 关看门狗 l d i u d a t a , 0 x 6 a ; 设置随机数初值 l d i d d a t a , 0 x 3 c ; s t a r t p : o u t p o r t a , u d a t a ; 输出到 A 口 o u t p o r t c , d d a t a ; 输出到 C 口 l d i t e m p , 0 x 8 0 ; 设延时常数 r c a l l d e l a y ; 调用延时子程序 r c a l l r a n d m ; 调用十六位随机数子程序 r j m p s t a r t p d e l a y : ; 通用延时子程序 从略 . . . . 1 6 位移位产生随机数原理图 8 1 6 位移位寄存器产生随机数循环组合 位 数 循环输入组合 S = 2 n - 1 Q n X O R Q m 8 Q 2 Q 3 Q 4 Q 8 ( 现程序按钮猜数采用 8 位数) 9 Q 5 Q 9 1 0 Q 7 Q 1 0 1 1 Q 9 Q 1 1 1 2 Q 2 Q 1 0 Q 1 1 Q 1 2 1 3 Q 1 Q 1 1 Q 1 2 Q 1 3 1 4 Q 2 Q 1 2 Q 1 3 Q 1 4 1 5 Q 1 4 Q 1 5 1 6 Q 4 Q 1 3 Q 1 5 Q 1 6 r a n d m : ; 产生十六位随机数子程序 m o v t e m p , u d a t a ; 产生 A 口随机数 m o v t e m p 1 , u d a t a ; r o l t e m p ; 通过进位位左循环移位 e o r t e m p 1 , t e m p ; 异或 第七章 AVR 单片机的应用 7 40 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN r o l t e m p ; 通过进位位左循环移位 r o l t e m p ; 通过进位位左循环移位 e o r t e m p 1 , t e m p ; 异或 m o v t e m p , d d a t a ; 产生 C 口随机数 s w a p t e m p ; 通过进位位左循环移位 e o r t e m p , t e m p 1 ; 异或通过进位位左循环移位 r o l t e m p ; 通过进位位左循环移位 r o l d d a t a ; 通过进位位左循环移位 r o l u d a t a ; 通过进位位左循环移位 r e t ; 子程序返回 7 . 3 . 8 按钮猜数程序 源程序: S L A V R 7 3 8 . A S M 许多场合如按钮猜数( 电脑摇奖, 电脑选出幸运号) , 游戏开始按钮等待一个不规则且不定序的数据产生, 即须要随机数发生器 随机数的种子由程序设定( 也可外接开关设定) , 启动种子后, 由移位寄存器以互斥的异或逻辑组合返回循环产生产生随机数的原理图如下: 1 6 位移位产生随机数原理图 8 1 6 位移位寄存器产生随机数循环组合 位 数 循环输入组合 S = 2 n - 1 Q n X O R Q m 8 Q 2 Q 3 Q 4 Q 8 ( 现程序按钮猜数采用 8 位数) 9 Q 5 Q 9 1 0 Q 7 Q 1 0 1 1 Q 9 Q 1 1 1 2 Q 2 Q 1 0 Q 1 1 Q 1 2 1 3 Q 1 Q 1 1 Q 1 2 Q 1 3 1 4 Q 2 Q 1 2 Q 1 3 Q 1 4 1 5 Q 1 4 Q 1 5 1 6 Q 4 Q 1 3 Q 1 5 Q 1 6 以 8 X 8 L E D 阵列, 开机时为了避免被使用者预测出压按时间对应随机数的变化值, 故 L E D字幕以广告动画画面显示, 并令随机数随着变化使无法预测随机数起始值, 广告动画面共有四张, 每张有 8 位数据见o r g d p f s t b ; 第七章 AVR 单片机的应用 7 41 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 由按钮( P D 1 ) 按下, A V R 用 8 位数据产生随机数, 由 P O R T A 口及 P O R T C 口输出随机数, 在 8 X 8 L E D上显示好玩的真实的按钮猜数 . i n c l u d e 8 5 1 5 d e f . i n c . d e f p e e d = r 1 6 . d e f d s p n = r 1 7 ; 存显示初始动画次数 . d e f t e m p 2 = r 1 8 第七章 AVR 单片机的应用 7 42 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN . d e f t e m p 1 = r 1 9 . d e f t e m p = r 2 0 . d e f s c n d p = r 2 1 . d e f c n t = r 2 2 . d e f r d a t a = r 2 3 ; 存随机种子数 . d e f r d a t a 9 = r 2 4 . e q u d p f s t b = 0 x 0 1 e 0 ; 大小矩形图表首址 . e q u r a n d t b = 0 x 0 2 1 0 ; 随机数种子表首址 . e q u n u m b e r t b = 0 x 0 2 4 0 ; 0 - 9 数字表首址 . o r g $ 0 0 0 0 r j m p R E S E T ; R e s e t H a n d l e . c s e g . o r g $ 0 0 1 0 R E S E T : l d i p e e d , h i g h ( R A M E N D ) ; 设置堆栈$ 2 5 F , 见器件配置文件 8 5 1 5 d e f . i n c o u t S P H , p e e d l d i p e e d , l o w ( R A M E N D ) o u t S P L , p e e d l d i p e e d , 0 x f f ; 对口初始化, o u t d d r a , p e e d ; 设 A 口为输出 o u t d d r c , p e e d ; 设 C 口为输出 l d i p e e d , 0 x f d ; P D 1 作输入, 且接内部上拉电阻 o u t d d r d , p e e d ; P D 1 为输入, 其余为输出 l d i p e e d , 0 x f f ; 关 D 口 o u t p o r t d , p e e d l d i p e e d , 0 x 1 3 ; 显示画面次数 s t a r t : l d i d s p n , 0 x 0 6 ; 显示初始动画 l d i z h , h i g h ( d p f s t b * 2 ) l d i z l , l o w ( d p f s t b * 2 ) d s p f m : r c a l l l d t b 8 ; 调用程序区数送到内存 R A M l d i t e m p 2 , 0 x a 0 ; 显示动画面次数 d s p f m 1 : r c a l l s c a n 1 ; 调用从内存取数显示一次 s b i s p i n d , 0 1 ; I / O 口的位被置位跳行, 检测到 P D 1 按下否 r j m p g e t s e e d ; 检测到 P D 1 按下转 d e c t e m p 2 ; - 1 b r n e d s p f m 1 ; 不为 0 转 d e c d s p n ; 初始画面次数- 1 b r n e d s p f m ; 不为 0 转 r j m p s t a r t ; 转到显示初始动画 g e t s e e d : i n c t e m p ; + 1 , 根据 P D 1 按下的时间, 选择随机数种子 s b i s p i n d , 0 1 ; I / O 口的位被置位跳行, 检测到 P D 1 按下否 r j m p g e t s e e d ; 检测到 P D 1 按下, 继续计数 a n d i t e m p , 0 x 1 f ; 按钮松开, 取随机数种子与 0 X 0 F 加 l d i z h , h i g h ( r a n d t b * 2 ) l d i z l , l o w ( r a n d t b * 2 ) 第七章 AVR 单片机的应用 7 43 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN a d d z l , t e m p l p m m o v r d a t a , r 0 ; 得到随机数种子 n e x t : l d i d s p n , 0 x 0 8 ; 显示 8 个不同的随机数; r e p e e t : r c a l l r a n d m ; 调用产生随机数子程序 r c a l l d s p n u m b e r ; 调用显示 8 个不同的随机数 d e c d s p n ; - 1 b r n e r e p e e t ; d s p n 不为 0 转 r c a l l r a n d m ; 调用产生随机数子程序 g u e s s 1 : r c a l l d s p n u m b e r ; 调用显示同一随机数, 直到有键按下 s b i c p i n d , 0 1 ; 松开后再往下执行( I / O 口清零跳行) r j m p g u e s s 1 ; 转显示同一随机数, 直到有键按下 w a i t : r c a l l d s p n u m b e r ; s b i s p i n d , 0 1 r j m p w a i t ; 等待按钮按下 l d i r d a t a 9 , 0 x 0 3 ; 显示动画三次 s t a r t 0 : l d i d s p n , 0 x 0 6 ; 每次显示六幅画面 l d i z h , h i g h ( d p f s t b * 2 ) l d i z l , l o w ( d p f s t b * 2 ) d s p f m 0 : r c a l l l d t b 8 ; 调用从 Z 指向的程序区取数据送到内存 0 0 8 0 - 0 0 8 7 中 l d i t e m p 2 , 0 x a 0 ; 显示次数 d s p f m 1 a : r c a l l s c a n 1 ; 调用从内存 0 0 8 0 - 0 0 8 7 中取数据显示一次 d e c t e m p 2 ; - 1 b r n e d s p f m 1 a ; 不为 0 转 d e c d s p n ; 显示初始动画次数- 1 b r n e d s p f m 0 ; 不为 0 转 d e c r d a t a 9 ; 显示动画三次- 1 b r n e s t a r t 0 ; 不为 0 转 r j m p n e x t ; 转显示 8 个不同的随机数 d s p n u m b e r : ; 显示一个 0 - 9 数字的子程序 l d i z h , h i g h ( n u m b e r t b * 2 ) l d i z l , l o w ( n u m b e r t b * 2 ) a d d z l , r d a t a 9 r c a l l l d t b 8 ; 取数 l d i t e m p 2 , 0 x a 0 ; 该数字重复显示 A 0 H 次 d s p n 1 : r c a l l s c a n 1 d e c t e m p 2 b r n e d s p n 1 r e t s c a n 1 : p u s h x l ; 从内存 0 0 8 0 - 0 0 8 7 中取数据显示一次 l d i t e m p , 0 b 0 1 1 1 1 1 1 1 m o v s c n d p , t e m p l d i c n t , 0 x 0 8 c o l 1 : o u t p o r t c , s c n d p ; 显示屏幕的一列 第七章 AVR 单片机的应用 7 44 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN l d r 1 , x + o u t p o r t a , r 1 r c a l l d e l a y s e c r o r s c n d p d e c c n t b r n e c o l 1 p o p x l r e t l d t b 8 : l d i x l , 0 x 8 0 ; 从 Z 指向的程序区取数据送到内存 0 0 8 0 - 0 0 8 7 中 l d i x h , 0 x 0 0 l d i t e m p 1 , 0 x 0 8 p u s h x l n e x l d 1 : l p m s t x + , r 0 l d r 0 , z + d e c t e m p 1 b r n e n e x l d 1 p o p x l r e t d e l a y : ; 通用延时子程序从略 . . . . r a n d m : m o v t e m p , r d a t a ; 产生 8 N ( 0 N 9 ) 随机数子程序 m o v t e m p 1 , r d a t a s w a p t e m p 1 e o r t e m p , t e m p 1 r o l t e m p 1 e o r t e m p , t e m p 1 r o l t e m p 1 e o r t e m p , t e m p 1 r o l t e m p r o l r d a t a m o v r d a t a 9 , r d a t a a n d i r d a t a 9 , 0 x 0 f c p i r d a t a 9 , 0 x 0 a b r s h r a n d m ; 产生了一个 0 R D A T A 9 9 的随机数 l s l r d a t a 9 l s l r d a t a 9 l s l r d a t a 9 r e t . c s e g . o r g d p f s t b ; ; 大小方框字形表 ; s m a l l o 第七章 AVR 单片机的应用 7 45 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN . d b 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 0 1 1 0 0 0 . d b 0 b 0 0 0 1 1 0 0 0 , 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 0 0 0 0 0 0 . d b 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 1 1 1 1 0 0 , 0 b 0 0 1 0 0 1 0 0 . d b 0 b 0 0 1 0 0 1 0 0 , 0 b 0 0 1 1 1 1 0 0 , 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 0 0 0 0 0 0 . d b 0 b 0 0 0 0 0 0 0 0 , 0 b 0 1 1 1 1 1 1 0 , 0 b 0 1 0 0 0 0 1 0 , 0 b 0 1 0 0 0 0 1 0 . d b 0 b 0 1 0 0 0 0 1 0 , 0 b 0 1 0 0 0 0 1 0 , 0 b 0 1 1 1 1 1 1 0 , 0 b 0 0 0 0 0 0 0 0 ; b i g o . d b 0 b 1 1 1 1 1 1 1 1 , 0 b 1 0 0 0 0 0 0 1 , 0 b 1 0 0 0 0 0 0 1 , 0 b 1 0 0 0 0 0 0 1 . d b 0 b 1 0 0 0 0 0 0 1 , 0 b 1 0 0 0 0 0 0 1 , 0 b 1 0 0 0 0 0 0 1 , 0 b 1 1 1 1 1 1 1 1 . d b 0 b 0 0 0 0 0 0 0 0 , 0 b 0 1 1 1 1 1 1 0 , 0 b 0 1 0 0 0 0 1 0 , 0 b 0 1 0 0 0 0 1 0 . d b 0 b 0 1 0 0 0 0 1 0 , 0 b 0 1 0 0 0 0 1 0 , 0 b 0 1 1 1 1 1 1 0 , 0 b 0 0 0 0 0 0 0 0 . d b 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 0 0 0 0 0 0 , 0 b 0 0 1 1 1 1 0 0 , 0 b 0 0 1 0 0 1 0 0 . d b 0 b 0 0 1 0 0 1 0 0 , 0
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:0596、《AVR高速嵌入式单片机原理与应用》
链接地址:https://www.renrendoc.com/p-6127029.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2024  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!