




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一实验一 一 实验题目实验题目 试编写一段程序 其功能为将 21H 单元的内容 8 位分别依次存放到从 22H 开始的 8 单元中 二 二 keil 代码 代码 org 0000h jmp start org 0100h start mov 21h 8 mov A 21h 取出 21 中的数 mov R0 22h 初始化 mov R1 7h 循环次数为 7 loop RRC A 把 A 之中的最低位移到 C JC real 判断 C 里面是数是否为 1 如果是 1 则跳转到 real mov R0 0h jmp kk real mov R0 1h 如果是 1 则将 1 赋到 R0 单元里 kk INC r0 依次判断 A 中的每一位 DJNZ R1 loop jmp 死循环 end 三 实验截图实验截图 四 四 实验小结 实验小结 这是我们单片机的第一个实验 因为刚接触 所以会感觉很 陌生 内心有一种畏惧感 看到题目的时候也是没有头绪 可以 说完全是不知道到底题目是一个什么意思 更是不知道我们应该 如何编写程序 不过后面通过老师的讲解 自己也去查看了一些 有关的书籍 慢慢也理解了该如何去实现这种实验题目 在认真琢磨之后 我开始学会像以前刚开始学习 C 语言一样 慢慢绘制一个程序的流程图 理清思绪 然后根据流程图编写相 应的代码 下面是本题的实验流程图 通过完成这个实验 我对单片机的程序有了很大的认识 实 验中 也是深刻的理解到了一个单片机程序每一步的实现与运行 当然 也掌握了在 keil 中调试的方法 实验二实验二 一 实验题目实验题目 若 0 5 号键的键值分别是 EEH DEH BEH 7EH EDH DDH 设键值存放在内部 RAM 20H 单元中 编程实现根据 2OH 中的键值分别使程序转移到 PR0 PR4 程序段 要求当以上程序段的功能完成后 都采用 RET 指令 指定返回到程序的初始入口 START 标号处 要求 PR0 教材 75 页习题 PR1 同上 习题 9 题 PR2 同上 习题 10 其余入口 只需完成空操作就返回 二 二 keil 代码 代码 org 0000 ljmp start org 0100 TAB DB 0EEH 0DEH 0BEH 7EH 0EDH 0DDH start mov dptr start push dpl push dph mov A 0EEH MOV 20H A MOV DPTR TAB 置键码表首址置键码表首址 MOV A 0 表的起始位置的偏移量为零表的起始位置的偏移量为零 NEXT PUSH ACC 先保存先保存 A 寄存器中的值寄存器中的值 MOVC A A DPTR A 是键码表的编码是键码表的编码 CJNE A 20H NEXT1 将将 20H 值和键码表的值比较值和键码表的值比较 POP ACC RL A 如相等 序号乘以如相等 序号乘以 2 得到分支表内偏 得到分支表内偏 移量移量 2n 8 位变位变 16 位 位 MOV DPTR APJ 置分支表首址置分支表首址 JMP A DPTR 执行表执行表 JPT 2H 中的中的 AJMP PRn 指令指令 NEXT1 POP ACC 不相等 则比较下一个不相等 则比较下一个 INC A CJNE A 6 NEXT 表示如果表示如果 6 了 说明编码查完了也没有了 说明编码查完了也没有 相等的相等的 程序直接结束 程序直接结束 SJMP APJ AJMP PR0 AJMP PR1 AJMP PR2 AJMP PR3 AJMP PR4 PR0 MOV R7 5H MOV 3DH 00H MOV 3EH 20H MOV 4EH 88H MOV 5EH 98H MOV A 0 MOV R4 A 正数个数正数个数 MOV R5 A 负数个数负数个数 MOV R6 A 零的个数零的个数 MOV R0 40H MOV R1 50H MOV SP 3FH LOOP POP ACC JZ ZERO JB ACC 7 FS INC R4 MOV R0 A INC R0 AJMP DJ FS INC R5 MOV R1 A INC R1 AJMP DJ ZERO INC R6 DJ DJNZ R7 LOOP RET DATA1 DB 0EFH 3FH 3EH 07H PR1 MOV R7 03H 进行进行 3 次循环次循环 MOV R0 DATA1 MOV A R0 CPL A 取反取反 ADD A 01 加加 1 MOV R0 A AB1 INC R0 MOV A R0 CPL A ADDC A 0 带进位带进位 DJNZ R7 AB1 SJMP RET BUF1 DB 1111B 0101B 0010B 0100B 0101B 0010B 0001B 0000B 1001B 0000 B 1010B 1011B 0000B 0011B 0010B 0001B BUF2 DB 0 BUF DB 0 PR2 30h 放平均值放平均值 40h 放余数放余数 MOV R0 BUF1 MOV R7 16 循环循环 16 次数次数 MOV B 0 MOV A R0 MOV R2 A LOOP1 MOV A R2 INC R0 ADD A R0 MOV R2 A MOV A B ADDC A 0 MOV B A DJNZ R7 LOOP1 MOV R6 04H MOV 30H BUF2 MOV 30H A MOV 40H BUF MOV 40H 0 NEX CLR C MOV A B RRC A MOV B A MOV A 30H RRC A MOV 30H A MOV A 40H RRC A MOV 40H A DJNZ R6 NEX SJMP RET PR5 RET PR3 RET PR4 RET END 三 三 实验截图 实验截图 初始化 初始化 结果 四 四 实验小结 实验小结 本实验中 将键码排成表 将键码表中的值和 20H 单元中 的内容进行比较 另外编制一张转移表 存放 AJMP 指令 利用 JMP A DPTR 执行表内的 AJMP 指令 从而实现分支转移 RL A 因为每个 AJMP 指令占两个字节 将刚记下来的 键码中的值 即 键码的序号 乘以 2 即为转移表的偏移地址 在利用 JMP A DPTR 执行表内的 AJMP 指令 从而实现分支转 移 mov dptr start Push dpl push dph 指定每次主程序返回到 start 在单片机 中 每一个子程序的返回用 RET 指令 而 RET 指令的功能正好可 以使得子程序从栈顶弹出断点到 PC 从而返回到主程序 实验三实验三 一 实验题目实验题目 使用 C 语言完成 实验一 实验二 二 二 keil 代码 代码 实验一 实验一 include include void main char p1 0 x21 char p2 0 x22 int i 1 p1 0 x8 while i 1 p2 i 实验二 实验二 include void PR0 void PR1 void PR2 void PR3 void PR4 void PR5 int main int i 键码表键码表 code 的下表的下表 int key 0 char code1 0 xEE 0 xDE 0 xBE 0 x7e 0 xED 0 xDD char p0 0 x20 指针变量指针变量 p0 指向指向 20H 这个单元这个单元 p0 0 xDE 给给 20H 单元赋初值 单元赋初值 20H 单元里存放键码单元里存放键码 表中任一值表中任一值 for i 0 i sizeof code1 i if p0 code1 i break key i switch key case 0 PR0 break case 1 PR1 break case 2 PR2 break case 3 PR3 break case 4 break case 5 break default break return 0 void PR0 char table1 16 1 2 6 7 8 9 0 1 2 3 4 5 6 1 4 6 char data p30 0 x30 char data p40 0 x40 char data p50 0 x50 int i int countR4 0 分别将正数 负数和零的个数存入分别将正数 负数和零的个数存入 R4 R5 R6 中中 int countR5 0 int countR6 0 for i 0 i sizeof table1 i 依次将依次将 table1 表里的表里的 16 个数据存入个数据存入 30H 单元开始的单元里 单元开始的单元里 p30 i table1 i for i 0 i0 p40 p30 p40 countR4 else if p30 0 p50 p30 p50 countR5 else countR6 p30 void PR1 char data1 0 x10 0 x11 0 x12 0 x13 int i int j char Cy PSW 7 data1 0 data1 0 0 x1 while j 4 for j 0 j sizeof data1 j data1 i data1 i Cy i void PR2 char buf1 0 x1 0 x2 0 x3 0 x4 0 x5 0 x6 0 x7 0 x8 0 x9 0 x0A 0 x0B 0 x0C 0 x0D 0 x0E 0 xF char buf2 0 char buf 0 int sum 0 int i 1 while i 16 sum sum buf1 i i buf2 sum 0 x10 buf sum 0 x10 三 三 实验截图 实验截图 实验一 实验一 实验二 实验二 四 四 实验小结 实验小结 在本实验中 我们用 C 语言编写代码的时候 特别注意指针 的使用 另外 在单片机中使用 C 语言 与我们之前写 C 语言的 时候还是有一些不同的地方 尤其是在指针使用上面的不同 C 语言是一种通用的程序设计语言 代码率高 数据类型丰富 且 具有良好的程序结构 单片机的 C 语言采用 C51 编译器 由 C51 产生的目标代码短 运行速度快 所需内存空间小 实验中 注意 for i 0 i sizeof table1 i p30 i table1 i 表示依次将 table1 表里的 16 个数据存入 30H 单 元开始的单元里 实际上 在 C 中指针就相当于一个数组 在本实验中 我可以根据之前的汇编程序实验 较为容易的 根据每个子程序编子函数模块 由于之前有 C 语言的基础 所以 能够比较好的完成本实验 实验四实验四 五 实验题目 当 K1 键按下后 首先使蜂鸣器响一声 然后使 LED1 LED8 完成 3 种闪亮的花样 自己定义 每一种花样循环 3 次 然后周而复始 六 keil 代码 当 K1 键按下后 首先使蜂鸣器响一声 然后使 LED1 LED8 完成 3 种闪亮的花样 自己定义 每一种花样 循环 3 次 然后周而复始 include sbit P2 0 P2 0 接蜂鸣器 sbit P2 7 P2 7 sbit P1 0 P1 0 sbit P1 1 P1 1 sbit P1 2 P1 2 sbit P1 3 P1 3 sbit P1 4 P1 4 sbit P1 5 P1 5 sbit P1 6 P1 6 sbit P1 7 P1 7 void DELAY int time 延时 while time void BUZ ON if P2 7 0 P2 0 1 else P2 0 0 void F1 void int i char data group mide 5 0 x00 0 x18 0 x24 0 x42 0 x81 向两边延伸 for i 0 i 5 i P1 data group mide i DELAY 20000 P1 0 x00 void F2 void int i char data group left 8 0 xFF 0 x7F 0 x3F 0 x0F 0 x07 0 x03 0 x01 0 x00 向左延伸 for i 0 i 8 i P1 data group left i DELAY 20000 P1 0 x00 void F3 void int i char date group right 8 0 x00 0 x01 0 x03 0 x07 0 x0f 0 x3f 0 x7f 0 xff 向右延伸 for i 0 i 8 i P1 date group right i DELAY 20000 P1 0 x00 void main unsigned int i 每种花样循环三次 P2 0 0 P2 7 1 BUZ ON P1 0 x00 while P2 7 0 for i 0 i 3 i 花样 1 F1 for i 0 i 3 i 花样 2 F2 for i 0 i 3 i 花样 3 F3 三 protues 电路图 四 实验截图 5 实验小结 通过本次实验 我们熟悉了 protues 的编译环境 对以后的单片 机学习有很大帮助 实验五实验五 1 实验题目 程序启动后 4 位 LED 显示器滚动显示 每按下 1 次 K1 键 后 首先使蜂鸣器响一声 然后 依次使 LED 滚动显示 CNT 的计数值 0 9 2 Keil 代码 程序启动后 4 位 LED 显示器滚动显示 每按下才 1 次 K1 键后 首先使蜂鸣器响一声 然后 依次使 LED 滚动显示 CNT 的计数值 0 9 1 按键 K1 采用中断来管理 INT0 采用边沿触发 2 中断服务程序完成四个功能 1 消除按键 K1 抖动 2 CNT 计数 3 查表将计数值转换成 LED 显示器的段代码 4 将段代码分别放入 4 个显示缓冲单元 include define uchar unsigned char define uint unsigned int sbit P2 7 P2 7 sbit P3 3 P3 3 uchar CORDING 0 xc0 0 xf9 0 xa4 0 xb0 0 x99 0 x92 0 x82 0 xf8 0 x80 0 x90 0 xc0 0 xf9 0 xa4 0 1 2 3 4 9 0 1 2 的段码 int delayms uint t uint n while t n 200 while n return 0 int main uint CNT 0 P2 7 0 P3 3 1 P1 0 xF7 while 1 if P3 3 0 uint i CNT P2 7 1 delayms 100 for i 1 i10 CNT CNT 10 P2 7 0 return 0 3 protues 电路图 4 实验截图 5 实验总结 通过本次实验 我们熟悉了 CNT 计数 学会了如何使 LED 灯 上显示 0 9 数字 实验六实验六 1 实验题目 两个数码管 K1 K2 两个按键 完成 K1 启动计数 K2 暂 停计数 每一秒钟数码管增加 1 60 秒钟后 数码管回归 0 重新计数 二 keil 代码 两个数码管 K1 K2 两个按键 完成 K1 启动计数 K2 暂停计数 每一秒钟数码管增加 1 60 秒钟后 数码管回归 0 重新计数 按键 K1 K2 采用中断来管理 INT0 采用边沿触发 define uchar unsigned char define uint unsigned int include uchar CNT 0 uchar m 0 sbit P3 7 P3 7 sbit P3 2 P3 2 sbit P0 0 P0 0 uchar CORDING 0 x3F 0 x06 0 x5B 0 x4F 0 x66 0 x6D 0 x7D 0 x07 0 x7F 0 x6F 0 1 2 3 4 9 的段码 void Delay uint a while a void intproc interrupt 0 TR0 0 void Time0 interrupt 1 m 中断一次 m 加 1 if m 20 m 0 中断次数清零 CNT 秒加 1 if CNT 60 CNT 0 P1 CORDING CNT 10 显示十位 Delay 10 P2 CORDING CNT 10 显示个位 Delay 10 void init TMOD 0 x01 使用定时器 T0 使用方式 1 TH0 0 x3c TL0 0 xb0 50ms 中断一次 ET0 1 TR0 1 EX0 1 IT0 1 EA 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电子商务行业跨境电商市场前景预测研究报告
- 2025年生物医药科技应用前景研究报告
- 2025年环境监测产业技术创新与市场前景研究报告
- 商场供应商培训课件
- 国家事业单位招聘2025国家文化和旅游部恭王府博物馆应届毕业生招聘4人笔试历年参考题库附带答案详解
- 2025福建龙岩市人力资源服务有限公司招聘6人笔试参考题库附带答案详解
- 2025年甘肃公交建集团校园招聘200人笔试参考题库附带答案详解
- 2025年江西安义县工投商业管理有限公司第一批公开招聘工作人员15人笔试参考题库附带答案详解
- 2025年国网电力公司招聘(第二批)笔试参考题库附带答案详解
- 2025山西杏花村汾酒集团有限责任公司销售业务岗社会招聘笔试参考题库附带答案详解
- 检测室安全操作规程
- 教育研究方法课件《教育研究方法》
- 【课件】用空间向量研究距离夹角问题(第二课时角度-线线、线面角)
- 桥梁监测方案
- 财务大数据基础-全套课件
- 四年级语文下册课外阅读《青铜葵花》导读课 课件(共24张PPT)
- 一般毒性作用
- GB/T 4213-2008气动调节阀
- 小学班队工作原理与实践班队活动的组织与设计课件
- 固体废物采样记录
- 会议会务需求确认单
评论
0/150
提交评论