山大单片机实验(共18页).doc
《山大单片机实验(共18页).doc》由会员分享,可在线阅读,更多相关《山大单片机实验(共18页).doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上单片机实验报告孙洪悦 20112.1实验1:汇编程序实验12.1.2 自我完成实验 (1)实验内容 将片内 RAM 30H 单元中的 8 位二进制数转换成 10 进制数。希望转换后的结果保存于 31H和 32H,31H 低 4 位存放个位,高 4 位存放十位,32H 低 4 位存放百位,高 4 位为 0自我完成实验程序ORG 0000H AJMPMAINORG 0030HMAIN:MOV SP,#62H ;MOV 30H,#0AFH;先将30H写上100 MOV R0,#32H;将百位地址送R0MOV A,30H;这句写错了,应该是将30H的内容送给A,而不是30,我
2、误写成了#30MOV B,#64H;除数为100DIV AB ;AB相除MOV R0,A ;将百位的数送给32H地址MOV A,B ;将余数送给AMOV B,#0AH;将10送BDIV AB;AB相除SWAP A ;高低四位交换DEC R0 ;R0减1 到31HMOV R0,A ;将十位送31H的高四位MOV A,BANL A,#0FHORL 31H,A;31高低四位分别存十和百位SJMP $END2.1总结与提高:本程序用了一个小算法,一个三位数数X除以100,商a为百位,余数为:X-100*a再用此余数除10,商为十位,余数为个位。2.2实验2:汇编程序实验22.2.2 自我完成实验 (1
3、)实验内容 将片内 RAM 30H 开始的 32 个单元中分布着随机的有符号 8 位二进制数,请按从小到大的顺序进行排序,排序后的数据仍然保存到 30H 开始的 32 个单元中(低地址存放小数据)。程序及其注释 自我完成实验程序第一种排序方法:ORG 0000H AJMP MAINORG 0090HMAIN:MOV SP,#62H ;MOV A,#0HMOV R1,#30HMOV R7,#20HMOV DPTR,#TABLEMOV R0,#1FH;执行31次LOOP1:MOVC A,A+DPTRMOV R1,AINC R1INC DPTRMOV A,#0HDJNZ R7,LOOP1 ;执行32
4、次循环,在30-4F写表格数据LOOP2: MOV R1,#30H;将起始地址给R1MOV A,R0;R0为执行31次MOV R2,A;把进行一次冒泡的次数存到R2中LOOP3: CLR C ;清CMOV A,R1; ;比较开始,取第一个数MOV R3,A; 腾出累加器INC R1;指向下一个地址SUBB A,R1;取后一个数 ,并与前一个数相减,看是否有CY位溢出,溢出则说明前一个数小,要换位 JC LOOP4;前一个数小的情况下,两个数交换位置,否则,继续执行MOV A,R3;把后一个数存到累加器下XCH A,R1 ;累加器的数与R1指向的数交换位置, 即 ;前一个数和后一个数交DEC R
5、1 ;R1自减,准备将后面的数存到前面MOV R1,A;将后面的数存到前面INC R1 ;R1自增,准备下次转换,以上五行为交换LOOP4: DJNZ R2,LOOP3;R2自减,为下次冒泡准备DJNZ R0,LOOP2 ;跳回去进行下一轮冒泡SJMP $ORG 30HTABLE: DB 1,3,9,2,17,4,11,6DB 5,20,100,64,21,14,79,35DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69END第二种排序方法;ORG 0000H AJMP MAINORG 0090HMAIN:MOV SP,#62H ;MOV
6、 A,#0HMOV R1,#30HMOV R7,#20HMOV DPTR,#TABLEMOV R0,#1FH;执行31次LOOP1:MOVC A,A+DPTRMOV R1,AINC R1INC DPTRMOV A,#0HDJNZ R7,LOOP1 ;执行32次循环,在30-4F写表格数据LOOP2: MOV R1,#30H;将起始地址给R1MOV A,R0;R0为执行31次MOV R2,A;把进行一次冒泡的次数存到R2中MOV R4,#30H;R4存的是最大数的位置LOOP3: CLR C ;清CMOV A,R1; ;比较开始,取第一个数MOV R3,A; 腾出累加器INC R1;指向下一个地
7、址MOV A,R4SUBB A,R1;取后一个数 ,并与前一个数相减,看是否有CY位溢出,溢出则说明前一个数小,要换位 JC LOOP4;前一个数小的情况下,两个数交换位置,否则,继续执行;MOV A,R3;把后一个数存到累加器下;XCH A,R1 ;累加器的数与R1指向的数交换位置, 即 ;前一个数和后一个数交;DEC R1 ;R1自减,准备将后面的数存到前面;MOV R1,A;将后面的数存到前面;INC R1 ;R1自增,准备下次转换,以上五行为交换DJNZ R2,LOOP3;R2自减,为下次冒泡准备LOOP4: MOV A,R1 ;MOV R4,ADJNZ R2,LOOP3DJNZ R0
8、,LOOP2 ;跳回去进行下一轮冒泡SJMP $ORG 30HTABLE: DB 1,3,9,2,17,4,11,6DB 5,20,100,64,21,14,79,35DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69END总结与提高:所谓冒泡法,有两种理解方式:1.相邻的两个数比较,大的数放后一个位置,直到一轮循环后,最后一个数为此轮遍历的最大的数。2相邻的两个数比较,记下最大的数的位置,直到一轮遍历后将找到的最大的数与最后一个数交换,实现排序2.3 C语言程序实验 自我完成实验 (1)实验内容 将片内 RAM 30H 开始的 32 个单
9、元中分布着随机的有符号 8 位二进制数,请按从小到大的顺序进行排序,排序后的数据仍然保存到 30H 开始的 32 个单元中(低地址存放小数据)。#include#include#include#define uchar unsigned char#define uint unsigned int/uchar data a32 _at_ 0x30;/设定数组a的起始地址为30uchar data a32 _at_ 0x30;/设定数组a的起始地址为30uint i _at_ 0x55;uchar data b32 = 1,3,9,2,17,4,11,6,5,20,100,64,21,14,79,
10、35,92,7,91,23,65,16,13,18,18,73,65,101,27,19,62,69;void fuzhi()uchar j;/srand(5);for(j=0;j0;j-)while(t=at+1)temp = at+1;at+1 = at;at = temp;t+;t = 0;*/第二种方法实现冒泡 void maopao(uchar c,uchar num)uchar j = 0,temp = 0,m = 0;uchar weizhi = 0;uchar maxloc = 31;for(j=num;j0;j-)weizhi = 0;for(m=1;m=j;m+)if(cw
11、eizhicm)weizhi = m;temp = cweizhi;cweizhi = cmaxloc;cmaxloc = temp;maxloc-;void main()fuzhi();maopao(a,31);while(1);总结与提高:C语言编写的代码也是用两种方法写的,其中一种已经被注释掉了。所谓冒泡法,有两种理解方式:1.相邻的两个数比较,大的数放后一个位置,直到一轮循环后,最后一个数为此轮遍历的最大的数。2相邻的两个数比较,记下最大的数的位置,直到一轮遍历后将找到的最大的数与最后一个数交换,实现排序3.1基本并行I/O口实验实验功能为: 当按键 SW1 按下之后,D1-D8 轮流
12、点亮,点亮时间为 100ms,当按键停下后,停止轮换,再次按下后继续轮换。ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#60HMOV P2,#0FFHMOV 20H,#0FEHMOV R7,#8LOOP:SETB P1.0JNB P1.0,LOOP1AJMP LLOOP1:MOV A,20HMOV P2,AACALL DELAYMOV A,P2RL AMOV 20H,AL:DJNZ R7,LOOPDELAY:MOV R6,#200L1:MOV R5,#250DJNZ R5,$DJNZ R6,L1RETSJMP $END总结与提高:1.按键去抖动是必要的 2用移
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 18
限制150内