单片机实验报告 6000字Word格式.docx

上传人:b****4 文档编号:17947754 上传时间:2022-12-12 格式:DOCX 页数:18 大小:22.71KB
下载 相关 举报
单片机实验报告 6000字Word格式.docx_第1页
第1页 / 共18页
单片机实验报告 6000字Word格式.docx_第2页
第2页 / 共18页
单片机实验报告 6000字Word格式.docx_第3页
第3页 / 共18页
单片机实验报告 6000字Word格式.docx_第4页
第4页 / 共18页
单片机实验报告 6000字Word格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机实验报告 6000字Word格式.docx

《单片机实验报告 6000字Word格式.docx》由会员分享,可在线阅读,更多相关《单片机实验报告 6000字Word格式.docx(18页珍藏版)》请在冰豆网上搜索。

单片机实验报告 6000字Word格式.docx

.end

(2)

array:

.dw5,89,40,12,55,32,18,46,77,21

.varflag

bp=array

r1=0x0009

r4=0x0000

[flag]=r4

r3=[bp]

cmpr3,[bp+1]

jbnext

r2=[bp+1]

[bp]=r2

[bp+1]=r3

r3=0x0001

[flag]=r3

next:

bp=bp+1

r1-=1

jnzloop

r4=[flag]

jnz_main

nop

[实验中遇到的问题与解决措施]

编写程序中出现了一些逻辑错误,错将r1置为0x000a,改正后得到了正确结果。

第二次实验:

并行i/o口

实验三:

使用汇编语言实现a口的输出实验

实验四:

使用c语言实现a口的输出实验

实验五:

使用汇编语言实现a口为输入b口为输出实验

实验六:

使用c语言实现a口为输入b口为输出实验

1)通过实验掌握a口、b口作为输入和输出口时的使用方法;

2)使用汇编语言或c语言来实现a口或b口作为输入和输出口的实验。

1)装有windows系统和μ’nsp?

ide仿真环境的pc机一台;

2)μ’nsp?

十六位单片机实验箱一个。

[实验原理]

实验三、四:

通过点亮不同发光二极管来显示a口输出的数值不同。

实验五、六:

根据按键的不同,a口的数据就不同,则传送到b口的数据就不同,相应的发光二极管被点亮。

该实验中用到实验箱中的逻辑电平指示灯和1*8的键盘。

1)逻辑电平指示灯:

具有8路,阳极接电阻排至v5(vcc),i/o端口低电平“点亮”。

逻辑电平指示灯电路8路图见下图:

逻辑电平指示灯电路原理图

2)1*8键盘电路

可分别“h”或“l”,由sw选择,配合内部的上拉/下拉电阻合理使用。

1*8键盘电路原理图

[实验硬件连接]

实验内容二:

b口输入,a口输出

iob7

iob6

iob5

iob4

iob3

iob2

iob1

iob0ioa7ioa6ioa5ioa4ioa3ioa2ioa1ioa0

[实验内容]

1、根据所提供的程序学习实验三、四、五、六。

2、建立一个项目,编写程序,实现:

按键连接b口作为输入,a口为输出连接发光二极管。

通过按键控制相应的发光二极管亮或灭。

(要求写出实验内容2的程序,加入适当的指令说明)

(1)在试验5,6基础上改编程序实现b口输入a口输出:

main函数里:

l_user_init_io:

改为:

l_user_init_io:

r1=0x0000;

[p_ioa_dir]=r1;

[p_iob_dir]=r1;

[p_ioa_attrib]=r1;

[p_iob_attrib]=r1;

[p_ioa_data]=r1;

[p_iob_data]=r1

r1=0xffff;

[p_ioa_attrib]=r1;

r1=0x0000;

[p_iob_data]=r1;

retf;

key函数里:

(1)f_key_scan_serviceloop:

r1=[p_ioa_data];

f_key_scan_serviceloop:

//从ioa口获取按键数据r1=[p_iob_data];

(2)f_key_scan_serviceloop_2:

r1=[p_ioa_buffer];

r1&

amp;

=0xff7f;

[p_ioa_buffer]=r1;

=0x000f;

r2=r1;

r3=r2xor0xffff;

nop;

nop;

r1|=0x0080;

r1&

r1=[p_iob_data];

r2=r1;

//从iob口获取按键数据//ioa7位置为0

//从ioa口获取按键数据

//ioa7位置为1

//ioa7位置为0

//从iob口获取按键数据

开始时未改动按键函数,始终无变化,改动后,实验现象和预期的一样。

第三次实验:

系统时钟与定时器参看实验七:

定时器timera/b实验实验八:

系统时钟实验

1)通过实验了解定时器timera/b的结构及使用方法;

掌握预置数单元

p_timera/b_data和定时控制单元p_timera/b_ctrl的设置方法;

熟悉定时器timera/b的编程方法。

2)了解spce061pll振荡器的功能及其应用;

掌握系统时钟单元

p_systemclock的设置方法;

熟悉系统时钟和cpu时钟频率的编程方法。

[实验设备]同前。

实验七:

timera和timerb定时器启动后在预置数单元p_timera_data或p_timerb_data内置入一个计数初值n后,定时器/计数器会在选择的时钟源频率下开始向计数增加的方向计数,n+1,n+2,……fffeh,当计数到ffffh后定时器/计数器溢出。

一方面,产生一个中断请求信号ta_timeout_int或tb_timeout_intcpu,响应后执行相应的中断服务程序,与此同时计数初值n会被自动重新置入定时器/计数器内并重复上述加计数的过程。

另一方面,该溢出信号会作为脉宽调制输出计数器的时钟源输入,使其输出一个具有四位可调的脉宽调制占空比输出信号apwmo或bpwmo,其中iob8,iob9分别为apwm,bpwm的输出端。

iob8接一个发光二极管,可以通过观察二极管亮灭的快慢来对比频率的变化。

实验八:

在spce061a内,p_systemclock(写)($7013h)单元控制着系统时钟和cpu时钟,通过设置该单元的b5-b7位可以改变系统时钟的频率(fosc=20/24/32/40/49mhz);

将第0-2位置为111可以使cpu时钟停止工作,系统切换至低功耗的备用状态。

本实验通过选择不同fosc信号频率或改变cpuclk频率来观察发光二极管亮灭的快慢。

iob8接一个发光二极管实验八:

1)学习实验七、八;

2)建立新的项目,在定时器b下完成下列任务:

⑴当输入时钟分别为clka=fosc/2、clka=fosc/256、

clka=32768hz、clka=8192hz、clka=4096hz时观察输出频率;

⑵固定时钟,如clk为4096hz,设置不同的计数初值,观察溢出时

iob9输出;

⑶选择同一时钟源,改变占空比,观察灯的闪烁变化。

3)对实验八

1)选择不同fosc信号频率,观察发光二极管亮灭快慢;

2)改变cpuclk频率,观察发光二极管亮灭快慢。

一,写出实验内容二的程序,并说明如何完成或设置内容二中各个任务,预计实验结果。

在定时器b下工作:

实验七程序更改:

第一初始化改变:

.definep_timera_data0x700a;

改为.definep_timerb_data0x700c;

.definep_timera_ctrl0x700d;

0x700b;

改为.define

p_timerb_ctrl

第二iob8输出改为iob9:

改为:

r1=0x0100;

r1=0x0200;

[p_ioa_dir]=r1;

第三定时器a改为定时器b:

r1=0xff9f;

r1=0xff9f;

[p_timera_data]=r1;

[p_timerb_data]=r1;

r1=c_time_clk_4096;

r1=c_time_clk_4096;

[p_timera_ctrl]=r1;

[p_timerb_ctrl]=r1;

然后在保存运行即可实验现象和原例七timera的结果类似。

[实验总结]

通过此次实验掌握了设置计数初值,频率和占空比的方法。

而且观察到了不同的频率,计数初值,占空比对应的会有不同的实验现象。

第四次实验:

定时器中断和时基中断

参看实验九:

fiq中断实验

实验十:

irq0/irq1/irq2中断实验实验十一:

irq4中断实验实验十二:

irq5中断实验实验十三:

irq6中断实验

1)了解fiq的中断向量和中断源;

掌握中断控制单元p_int_ctrl、p_int_clear的设置方法;

熟悉定时器中断的编程方法。

2)了解irq0、irq1、irq2的中断向量和中断源;

熟悉定时器中断的编程方法。

了解irq4的中断向量和中断源;

熟悉时基中断的编程方法

4)了解irq5的中断向量和中断源;

5)了解irq6的中断向量和中断源;

熟悉时基中断的编程方法[实验设备]同前。

3)

实验九:

fiq中断对应pwm、tma、tmb中断源;

通过写p_int_ctrl来设置中断允许,fiq_tma,fiq_tmb中断源分别是通过定时器a、定时器b产生的。

当计满溢出时产生中断请求信号ta_timeout_int或tb_timeout_int,cpu响应后进入中断执行相应的子程序,中断程序里可以通过读取p_int_ctrl单元,判断是哪个中断源并进入相应的子程序控制发光二极管点亮。

实验十:

irq0_pwm、irq1_tma、irq2_tmb中断源,通过写p_int_ctrl来设置中断允许,irq1_tma和irq2_tmb中断源分别是通过定时器a、定时器b产生的。

当计数满溢出时产生中断请求信号ta_timeout_int或tb_timeout_int,cpu响应后进入对应的中断,并在相应的中断程序里执行控制发光二极管亮灭的程序。

实验十一:

irq4中断对应4096hz、2048hz、1024hz中断源,通过写p_int_ctrl来设置中断允许cpu响应后进入中断。

我们编写一个用中断方式控制发光二极管亮灭程序,中断程序里读取p_int_ctrl单元,判断是哪个中断源转到相应中断程序控制对应发光二极管亮或灭,从而了解irq4中断的组成及编程。

实验十二:

irq5中断对应4hz、2hz中断源,通过写p_int_ctrl来设置中断允许程序运行后就会产生相应的中断。

我们编写一个用中断方式控制发光二极管亮灭程序,中断程序里读取p_int_ctrl单元,判断是哪个中断源转到相应中断程序控制对应发光二极管亮或灭,从而了解irq5中断的组成及编程。

实验十三:

irq6中断对应tmb1、tmb2中断源,先设置

p_timebase_setup通过改变tmb1_clk可以选择时基频率tmb1:

8/16/32/64hz;

同样改变tmb2_clk可以选择时基频tmb2:

128/256/5122/1024hz。

写p_int_ctrl设置中断允许,cpu响应中断后可以通过读取p_int_ctrl单元,判断是哪个中断源并进入相应的子程序控制发光二极管亮灭。

实验九、十、十二十三:

a口的低四位接led灯,

b口的低四位接led灯。

a口的低八位接led灯。

[实验内容]1学习实验九、十、十一、十二、十三;

2建立新的项目,选用fiq方式或irq方式实现定时器中断,使a口输出控制的发光二极管以1s的周期闪烁;

使b口输出控制的发光二极管以2s的周期闪烁。

3建立新项目,选用irq4、irq5或irq5实现时基中断,使a口输出控制的发光二极管以2s的周期闪烁;

使b口输出控制的发光二极管以4s的周期闪烁。

[实验准备]要求:

1、写出实验内容2的程序,并说明如何完成或设置内容二中各个任务,预计实验结果。

实验程序:

选用fiq中断方式中的定时器中断源,定时器a或b计满溢出产生中断请求信号。

.includehardware.inc;

.definec_timea_clk0x0005;

.definec_timeb_clk0x0004;

.code.public_main

intoff

r1=0xffff

平输出口;

[p_ioa_attri]=r1

[p_ioa_dir]=r1

[p_ioa_data]=r1

同相高电平输出;

[p_iob_dir]=r1

[p_iob_attri]=r1

[p_iob_data]=r1

r1=0xdfff;

[p_timera_data]=r1;

[p_timerb_data]=r1;

r1=c_timea_clk;

[p_timera_ctrl]=r1;

r1=c_timeb_clk;

[p_timerb_ctrl]=r1;

r1=0xa800

fiq_tma、fiq_tmb

[p_int_ctrl]=r1

intfiq

l_loop:

jmpl_loop

.text

.public_fiq

_fiq:

pushr1,r5to[sp]//

r1=0x0800

testr1,[p_int_ctrl]//

jnzl_fiq_tmb

r1=0x2000

jnzl_fiq_tma

l_fiq_pwm:

r1=0x8000

[p_int_clear]=r1

popr1,r5from[sp]

reti

l_fiq_tma:

//ioa口设为同相高电//b口的低8位设置为//开中断fiq_pwm、压栈保护比较是否为fiq_tmb//是,则转至对应程序段否,则比较是否为fiq_tma//是,则转至对应程序段//否,则进入fiq_pwm中断r1=0xfff0

r5=0xffff;

//延时

l_delay1:

r2-=1;

jnzl_delay1;

//熄灭led

r1=0x2000;

[p_int_clear]=r1;

popr1,r5from[sp];

reti;

l_fiq_tmb:

r1=0xfff0;

r2=0xffff;

//延时

l_delay2:

jnzl_delay2;

r1=0x0800;

popr2,r5from[sp];

实验现象:

运行程序,与a口相连接的发光二极管闪烁两次,此时与b口相连接的发光二极管闪烁一次;

a口的灯闪烁较快,b口的灯闪烁较慢,而且可以判断出a口灯的闪烁的周期是1s,b口灯的闪烁周期是2s。

2、写出实验内容3的程序,并说明如何完成或设置内容3中各任务,预计实验结果。

选用irq6实现时基中断。

.definec_tmb1clk_8hz0x0000

.definec_tmb1clk_16hz0x0001

.definec_tmb1clk_32hz0x0002

.definec_tmb1clk_64hz0x0003

.definec_tmb2clk_128hz0x0000

.definec_tmb2clk_256hz0x0004

.definec_tmb2clk_512hz0x0008

.definec_tmb2clk_1024hz0x000c

.definec_tmb1_clkc_tmb1clk_64hz

.definec_tmb2_clkc_tmb2clk_128hz

.ram.varg_time1

.varg_time2

r1=0xffff//设置ioa口为同相高电平输出口

r1=0xffff//设置iob口为同相高电平输出口

r1=c_tmb1_clk

r1|=c_tmb2_clk

[p_timebase_setup]=r1

r1=0x0003//开中断irq6_c_tmb1和irq6_c_tmb2

r1=0

[g_time1]=r1

[g_time2]=r1

intirq;

nop

.public_irq6

_irq6:

pushr1,r5to[sp]//压栈保护

r1=0x0001

testr1,[p_int_ctrl]//比较是否为irq6_c_tmb2的中断源

jnzl_irq6_c_tmb2//是,则转至对应程序段

l_irq6_c_tmb1:

//否,则进入irq6_c_tmb1程序段;

r2=[g_time1]

r2+=0x0001

[g_time1]=r2cmpr2,128//比较是否为2秒;

jbel_led1_off//小于等于则led灭;

r1=0xfff0//大于则led亮;

cmpr2,256//比较是否为4秒;

jbel_led1_ret//小于等于则led继续亮;

r2=0x000//否则,g_time1单元清零,返回中断;

[g_time1]=r2

jmpl_led1_ret

l_led1_off:

l_led1_ret:

r1=0x0002

l_irq6_c_tmb2:

r2=[g_time2]

r2+=0x0001

[g_time2]=r2

cmpr2,128//比较是否为1秒;

jbel_led2_off//小于等于则led灭;

cmpr2,256//比较是否为2秒;

jbel_led2_ret//小于等于则led继续亮;

r2=0x0000//否则,g_time2单元清零,返回中断;

jmpl_led2_ret

l_led2_off:

l_led2_ret:

利用时基中断实现上述功能,现象同上。

a口灯的闪烁的周期是2s,b口灯的闪烁周期是4s。

[实验总结]

通过此次实验更加直观的理解了定时器中断和时基中断的内容和区别。

第五次实验:

a/d转换,双通道d/a

实验十七:

a/d转换

实验十八:

双通道d/a

实验十九:

一路输入的录音

1)了解adc输入接口的结构与转换原理;

熟悉模拟量输入口line_in1—

line_in7的使用;

掌握p_adcp_adc_ctrl单元的设置方法;

2)了解音频输出接口的结构与转换原理;

掌握p_dac2、p_dac1、

p_da

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1