




免费预览已结束,剩余45页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AVR单片机实验指导书 AVR单片机实验教学指导书 保定电力职业技术学院动力工程系热自教研室2007年4月18日目 录实验一 实训装置的认识与软件使用实验二 彩灯控制实验三 键控加减计数实验四 外部中断的使用实验五 数码管动态扫描显示实验六 实时时钟显示实验七 高频脉冲频率的测量实验八 低频脉冲频率的测量实验九 脉宽调制的实验实验十 显示驱动器7219的使用实验十一 7219驱动8位8段数码管的时钟显示实验十二 88点阵字符显示控制器的使用实验十三 异步通信实验实验十四 多路模拟数据采集与显示实验十五 模拟比较器应用实验十六 矩阵键盘扫描与编码显示实验十七 常数设置实验十八 液晶显示器应用 实验一 AVR实训装置与软件使用一、目的1 熟悉实训装置上元器件名称、作用及相应的接口。2 会使用C编译器编辑、编译、调试简单C源程序。3 会使用下载软件将程序代码写入实训装置并得到正确结果。二、实训装置 实训装置及相应元件如图1所示。 图1 实训装置及相应元件所有模块的引出接口为标准FC-l0芯连接。FC座的接口外形如图2所示。引脚定义如表1所示。8引脚对应一字节的8位数据D0D7,9引脚为电源Vcc,10引脚为电源GND。表1 FC-10座引脚定义引脚序号12345678910对应定义D0D1D2D3D4D5D6D7VCCGND本实训装置按功能模块化设计,各模块之间是相互独立的。各功能模块都可以与ATmegal6相连接,构成不同的单片机系统。模块之间的连接采用如图2所示的扁平线连接。不同的连接可以组成不同的应用系统,因此装置对用户是开放的。图2 FC-l0座及扁平连接线 图3单片机ATmegal6单元 三、实训装置原理图 单片机ATmegal6单元如图3所示。 8个LED双色发光管显示电路如图4所示,8个数码管显示电路如图5所示。8按钮开关控制电路如图6所示。8拨动开关控制电路如图7所示。其它单元电路介绍见后续实验。 图4 8个LED发光管显示电路图 图5 8个位数码管数字显示电路图6 按钮开关模块电路图图7 拨动开关模块电路图 四、实训装置的使用本实训装置中的8个LED双色发光管显示器、8位LED数码管显示器、88点阵汉字显示器、LCD液晶显示器属于输出设备,与它们连接的ATmegal6单元相应口的方向寄存器应必须设置为输出方向(DDRX=0XFF)。本实训装置中的按钮开关组、拨动开关组、A/D转换器、44矩阵键盘属于输入设备,与它们连接的ATmegal6单元相应口的方向寄存器必须设置为输入方向(DDRX=0X00)。五、C编译器(Code Vision AVR软件)及下载软件(SLISP)使用(实际操作)例1:编写并调试程序使C口输出等于A口输入。#include ;/文件头 main() char a;/设置局部变量DDRA = 0x00;/A口设置输入DDRC = 0xff;/C口设置输出 while (1) a=PINA; PORTC=a; 步骤:(1) 用代码生成器生成框架文件,然后修改该文件。(2) 编辑、编译、调试该文件并生成HEX代码。(3) 启动SLISP下载软件将生成的HEX代码写入AVR芯片。(4) 观察结果是否符合命题要求,若不符合则重复上述过程。例2:编写并调试程序使键控8个发光管不断闪光。#include ;/文件头#include ;/延时函数 main() DDRD= 0x00;/A口设置输入;PORTD=0xff;/D口设置上拉。DDRC = 0xff;/C口设置输出 ;PORTC=0xff; /C口输出高电平; while (PIND.5=1);while (1) PORTC=0xff; delay_ms(500) ; 要求:分别使用异或语句 及取反语句 例3:编写并调试程序使C口某位不断由左向右循环移动。提示:用循环语句 例4:编写并 调试程序使C口由左向右循环移位。由全1变全0。提示:用循环语句实验二 彩灯控制 一、实验目的与任务1 实验目的 熟悉并行接口的设置与应用; 进一步熟悉编译软件和下载软件的使用; 熟悉C语言中移位、延时、数组等指令的应用; 增强学习单片机的兴趣。2 实验任务任务一:实验板上有8只LED双色发光二极管,每只发光管低电平点亮,编程使发光管红灯间隔0.3S单一右移点亮,然后绿灯间隔0.3S单一左移点亮;发光管红灯间隔0.3S逐一右移点亮,然后绿灯间隔0.3S逐一左移点亮;重复循环。任务二:实验板上有8只LED双色发光二极管,每只发光管低电平点亮,编程使发光管红灯间隔0.3S逐一右移点亮,其次绿灯间隔0.3S逐一左移点亮,然后橙灯间隔0.3S逐一右移点亮;发光管红灯间隔0.3S由中间向两边逐一点亮,其次绿灯间隔0.3S由两边向中间逐一点亮;重复进行 二、实验接线与要求 实验板上将双色发光二极管LED设计为一个独立的单元回路,用扁平线将PD口与红灯LED口连接,将PC口与绿灯LED口连接,形成如图12所示的电路,实验要求将PD口、PC口设置为输出。图8 实验二LED显示电路图 三、实验参考程序 程序一: #include #include unsigned char dataa=0xff,0xe7,0xc3,0x81,0x00; void main(void) unsigned char t,j; DDRC=0xFF; PORTC=0xff; DDRD=0xFF; PORTD=0xff; while(1) /单发光管左右移动 for(t=0;tt); delay_ms(300); PORTD=0XFF; PORTC=0XFF; for(t=0;t8;t+) PORTC=(1t); delay_ms(300); PORTC=0XFF; PORTD=0XFF; /发光管左右逐一全亮 for(t=0;tt; delay_ms(300); PORTD=0XFF; PORTC=0XFF; for(t=0;t9;t+) PORTC=0XFFt; delay_ms(300); PORTC=0XFF; PORTD=0XFF; 程序二:#include #include unsigned char dataa=0xff,0xe7,0xc3,0x81,0x00; void main(void) unsigned char t,j; DDRC=0xFF; PORTC=0xff; DDRD=0xFF; PORTD=0xff; while(1) for(t=0;tt; delay_ms(300); PORTD=0XFF; PORTC=0XFF; for(t=0;t9;t+) PORTC=0XFFt; delay_ms(300); PORTC=0XFF; PORTD=0XFF; / for(t=0;tt; PORTC=0XFFt; delay_ms(300); PORTD=0XFF; PORTC=0XFF; for(t=0;t5;t+) PORTD=dataat; delay_ms(300); PORTC=0XFF; PORTD=0XFF; for(t=5;t0XFF;t-) PORTC=dataat; delay_ms(300); PORTC=0XFF; PORTD=0XFF; 四、实验指导 打开CodeVisionAVR开发编程软件,新建一个工程文件框架,参照上述程序清单或根据实验要求自己重新修改设置并输入程序。在程序设计过程中须将ATmegal6的PC口设置为输出。编译之前先将调试码设置成外部调试码,方法是按下工具栏中的configure the project 命令,出现一个对话框,再按下c compiler按钮,在对话框的左上角选择芯片型号和时钟频率,在右下角将文件输出格式设置为外部调试码(即选择OBJ ROM HEX EEP)。将所输入的程序进行编译(菜单Project Make命令),或者在工具栏单击Make按钮),若编译时未生成可执行文件*hex,说明程序有语法错误,此时必须根据编译器所列出的错误消息,逐条查改,重新编译,直到错误消除并生成*hex文件。 打开下载程序,将刚刚生成的相应*hex文件写入单片机(在此之前,须将单片机实验板按要求与PC机连接正确,单片机实训装置接通电源)。 按复位键RESET,观察实验结果。 五、实验扩展 由于本实训装置将ATmegal6的4个I/O口PA、PB、PC和PD的引脚,全部引出且作为独立的端口使用,所以本实验除了可以用PC口和PD口外,PA和PB口都可作为“彩灯”的控制口。 (1) 仿照LED与PC和PD口的相连,分别将ATmegal6的PA和PB 口作为作为“彩灯”的控制口,重新编写程序、编译并写入实训装置,观察实验结果。 (2) 改变延时时间即改变语句delay_ms(300),控制“彩灯”的循环速度。 (3) 改变“彩灯”的循环方向。 (4) 自行设计“彩灯”的点亮方式及循环方式,观察实验结果。 实验三 键控加减计数 一、实验目的与任务 1 实验目的 掌握按键消抖的几种方法; 熟悉并行接口的设置与应用; 进一步熟悉编译软件和下载软件的使用; 熟悉C语言中if 、while语句的应用;2 实验任务采用PD口的8个发光二极管以“亮1灭0”的方式显示一个8 位的二进制数,PC口按键AN7每按下一次,PD口显示的二进制数加1,PC口按键AN0每按下一次,PD口显示的二进制数减1。 二、实验接线图与条件电路如图13所示。实验前,用扁平连接线将按钮开关接口与PC接口连接起来,用扁平连接线将LED发光管接口与PD接口相连起来。图9 键控计数电路实验要求是PC口设置为输入,并且是内部上拉;PD口设置为输出。三、实验原理 电路中,按钮不按下时,在内部上拉电阻的作用下,PC口为高电平。按钮按下时,引脚与地短接,PC口相应的该位为低电平。通常按键所用开关为机械弹性开关,均利用了机械触点的合、断作用,一个电压信号通过机械触点断开、闭合过程的波形如图14所示。图10 按键抖动波形由于机械触点的弹性作用,一个按钮开关在按下时不会马上稳定地接通,在松手时不会一下子断开。而是在闭合和断开的瞬间伴随有一连串的抖动,抖动的时间一般为510ms。按键有断开、下按、接通和释放四种情况,对应为高电平、高电平向低电平变化、低电平、低电平向高电平变化四种状态。每按一次键都要经历这四种状态,检查是否按了一次键,可以检查高电平向低电平变化或者检查低电平向高电平变化。检查高电平向低电平变化的方法是:上次检查为高电平,本次检查为低电平,则表示键已按下。检查低电平向高电平变化的方法是:上次检查如果为低电平,本次检查为高电平,则表示键已释放。也可以通过延时来实现消除按键抖动,具体的方法是如果按键按下值为0,延时2ms,跳过前沿抖动,然后执行相关程序。If (PINC.0=0) while(PINC.0=0) delay_ms(2); 此外还有一些其它方法可以消除抖动:程序等待按后通过:while(PINC.0=0);按住时等待或执行预定程序:while(PINC.0=0) ;按一键后执行预定程序:If (PINC.0=0) while(1) 。 四、实验参考程序#include #include void main(void)PORTC=0xff;DDRC=0x00;PORTD=0xff;DDRD=0xff;while (1) if(PINC.7=0) while(PINC.7=0) delay_ms(2);PORTD-; 五、实验延伸扩展 给出的参考程序是判断键的“按下”时,进行加、减计数的,若将程序改为判断按键 “释放”时,加、减计数。修改程序并调试,观察实验结果。实验四 外部中断的使用一、实验目的与任务1 实验目的 掌握外部中断的工作原理,熟悉外部中断的设置与使用; 会用C- AVR的代码生成器生成外中断的基本框架文件,能正确解读框架文件中关于外中断寄存器功能设置的语句。 了解CPU对中断请求的响应过程,会正确修改框架文件实现外中断的命题要求。 进一步熟悉位操作命令;2实验任务任务一:上电后8只发光管灭,按下外部中断0时,发光管高4位亮;按下外部中断1时,发光管低4位亮。任务二:上电后8只发光管灭,按下外部中断0时,发光管单一右移点亮;按下外部中断1时,发光管单一左移点亮。二、实验原理Atmega16有3个外部中断源INT0、INT1和 INT2,分别对应PD2、PD3和PB2。外部中断的原理如图15所示。CPU要实现中断的响应,首先合上中断控制总开关和分开关,其次设置中断触发方式等,然后按要求编制中断服务子程序。图11 外部中断原理图三、实验接线在实训装置上,将PD口与按钮开关的接口用扁平线相连,将PC口与LED接口用扁平线相连。要求PD口设置为输入,并且上拉;PC口设置为输出。 四、实验参考程序 程序一:#include interrupt EXT_INT0 void ext_int0_isr(void) PORTC=0X0F;interrupt EXT_INT1 void ext_int1_isr(void) PORTC=0XF0;void main(void)/I/O口的设置PORTC=0xFF;DDRC=0xFF;PORTD=0xFF;DDRD=0x00;/中断的初始化设置GICR|=0xC0;MCUCR=0x0F;MCUCSR=0x00;GIFR=0xC0;#asm(sei)while (1) 程序二: #include #include bit k1,k2;/设置全局位变量interrupt EXT_INT0 void ext_int0_isr(void)k1=1,k2=0;interrupt EXT_INT1 void ext_int1_isr(void) k1=0,k2=1;void main(void) char i;/I/O口的设置PORTC=0xFF;DDRC=0xFF;PORTD=0xFF;DDRD=0x00;/中断的初始化设置GICR|=0xC0; MCUCR=0x0F;MCUCSR=0x00;GIFR=0xC0;#asm(sei)while (1) while(k1) for(i=0;ii);delay_ms(200); while(k2) for(i=0;i8;i+)PORTC=(1i);delay_ms(200); ; 五、实验指导中断服务子程序框架的生成和初始化设置可以通过新建工程文件来建立。具体的操作是:新建工程文件选择芯片选择外部中断按钮先选中断0、设置触发模式为上升沿有效再选中断1、设置触发模式为上升沿有效点击菜单上的文件、选中程序阅览产生中断服务子程序框架选中该程序复制粘贴到C编译软件工程文件下适当地修改,编译、调试即可。实现任务二时,注意变量k1,k2必须是全局位变量。PD口必须接按钮接口设置为输入,这是因为中断0、中断1在PD口。另外有特别注意中断的初始化设置。六、实验扩展读懂本实验程序二,对程序进行修改,按中断0让发光管由中间逐一向两边点亮,按中断1让发光管由两边逐一向中间点亮。实验五 数码管动态扫描显示一、实验目的与任务1实验目的 熟悉8段数码管动态显示数字原理,并能读懂动态扫描程序。 会编制、调试动态扫描程序。 会修改动态扫描程序,使之能符合简单命题要求。 2实验任务任务一:上电后,使八个数码管显示1-8。任务二:上电后,使八个数码管显示0-9999高速循环。任务三:上电后,使八个数码管显示0-FFFF高速循环。三、实验接线用扁平线的两插头分别插入单片机PB口至数码管字形口LEDD插座(AJ4),用扁平线的两插头分别插入单片机PD口至数码管字位口LEDW插座(AJ3),如图16所示。 图12 实验五硬件电路连接图 四、 实验步骤:启动CVAVR编译程序编辑、调试动态扫描程序1。编译、下载程序到实验板。五实验程序清单程序一:#include #include /* 七段译码字形表 */ unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /* 显示缓冲区 */unsigned char ledbuff=0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f;/unsigned long xx; /* 8路动态扫描显示子程序*/ void disp(void) unsigned char i; for (i=0;i8;i+) PORTB=ledbuffi ; /共阴数码管字形 PORTD=(1i); /共阴数码管字位 delay_ms(1); /每个数码管显示延时1mS时间 /* 初始化子程序*/ void init(void) DDRB = 0xff; PORTB = 0xff; DDRD = 0xff; PORTD = 0xff; /* BCD转换1子程序*/ void bcd1(unsigned long xx ) ledbuff0=tablexx%10; ledbuff1=tablexx/10%10; ledbuff2=tablexx/100%10; ledbuff3=tablexx/1000%10; ledbuff4=tablexx/10000%10; ledbuff5=tablexx/100000%10; ledbuff6=tablexx/1000000%10; ledbuff7=tablexx/10000000%10; /* 主程序*/ void main(void) unsigned long aa;/设置长整型变量 init();/口初始化 while (1) aa=12345678;/变量置数 bcd1(aa); disp();/显示缓冲区的数 程序二:#include #include /* 七段译码字形表 */ unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /* 显示缓冲区 */unsigned char ledbuff=0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f ;/unsigned long xx,temp; /* 8路动态扫描显示子程序*/ void disp(void) unsigned char i; for (i=0;i8;i+) PORTB=ledbuffi ; /共阴数码管字形 PORTD=(1i); /共阴数码管字位 delay_ms(1); /每个数码管显示延时1mS时间 /* 初始化子程序*/ void init(void) DDRB = 0xff; PORTB = 0xff; DDRD = 0xff; PORTD = 0xff; /* BCD转换1子程序*/ void bcd1(unsigned long xx ) ledbuff0=tablexx%10; ledbuff1=tablexx/10%10; ledbuff2=tablexx/100%10; ledbuff3=tablexx/1000%10; ledbuff4=tablexx/10000%10; ledbuff5=tablexx/100000%10; ledbuff6=tablexx/1000000%10; ledbuff7=tablexx/10000000%10; /* 主程序*/ void main(void) unsigned long aa;/设置长整型变量 init();/口初始化 while (1) bcd1(aa+);/高速计数 disp();/显示缓冲区的数 if (aa=9999) aa=0; 程序三:#include #include /* 七段译码字形表 */ unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /* 显示缓冲区 */unsigned char ledbuff=0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f ;/unsigned long xx,temp; /* 8路动态扫描显示子程序*/ void disp(void) unsigned char i; for (i=0;i8;i+) PORTB=ledbuffi ; /共阴数码管字形 PORTD=(1i); /共阴数码管字位 delay_ms(1); /每个数码管显示延时1mS时间 /* 初始化子程序*/ void init(void) DDRB = 0xff; PORTB = 0xff; DDRD = 0xff; PORTD = 0xff; /* BCD转换1子程序*/ void bcd1(unsigned long xx ) ledbuff0=tablexx%16; ledbuff1=tablexx/16%16; ledbuff2=tablexx/256%16; ledbuff3=tablexx/4096%16; ledbuff4=0; ledbuff5=0; ledbuff6=0; ledbuff7=0; /* 主程序*/ void main() unsigned long aa;/设置长整型变量 init();/口初始化 while (1) bcd1(aa+);/高速计数 disp();/显示缓冲区的数 if (aa=0xffff) aa=0; 六、实验指导本例程序提供的用于动态扫描显示缓冲区转换的子程序函数与教材中提供的不一样,教材中缓冲区转换的子程序函数读起来可能有困难,所以本实验中采用了一种容易理解的表达方式。目的是让同学们理解动态扫描显示的应用。 七、实验扩展 本实验还有其它方法可自行研究,比如将高速计数速度减慢;改变显示方式(由低四位改成中间四位)等。实验六 实时时钟显示 一、实验目的与任务1 实验目的 进一步熟悉定时/计数器的定时工作原理; 掌握定时中断服务子程序的生成和设置定时计数器的初值; 能解读定时中断服务程序。2 实验任务 采用T0定时中断和动态扫描显示方式显示一个实时时钟的时-分-秒。 二、实验接线 在实训装置上,用扁平线的两插头分别插入单片机PB口至数码管字形口插座(CJ14),用扁平线的两插头分别插入单片机PD口至数码管字位口插座(CJ13)。如图17所示。图13 定时中断示意图 三、程序设计 (1)初值计算。晶振频率为8000MHz,TC0设置为8分频,使用溢出中断,初值值为56,TC0计数器从56开始计数到计满256后溢出所用时间约为200s,所以TC0溢出中断50次为10ms。 (2)TC0溢出中断服务子程序。定义5个计数变量,分别记录时、分、秒、百分秒、200微妙。每中断一次加上200微妙,累加50次,百分秒变量加1次,200微秒变量清零;百分秒变量累加到100次,秒变量加1次,百分秒清零;“秒变量”满60,秒清零、分加1;“分变量”满60分,分清零、时加1;“时变量”满24,时清零。(3)显示。有时、分、秒的显示子程序。参考程序如下: #include #include #include #include char secd,secdd,sec,min,hour=8; /* 七段译码字形表 */ unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /* 显示缓冲区 */unsigned char ledbuff=0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f ; interrupt TIM0_OVF void timer0_ovf_isr(void)TCNT0=56;secdd+;if(secdd=50)secdd=0 ,secd+;/10mSif(secd=100)secd=0 ,sec+; /1sif(sec=60)sec=0 ,min+;if(min=60)min=0,hour+;if(hour=24)hour=0; void init_t0(void)TCCR0|=0x02;TCNT0=56;TIMSK|=0x01;SREG|=0x80; /* 8路动态扫描显示子程序*/ void display(void) unsigned char i; for (i=0;i8;i+) PORTB=ledbuffi ; /共阴数码管字形 PORTD=(1i); /共阴数码管字位 delay_ms(1); /每个数码管显示延时1mS时间 /* 初始化子程序*/ void init_disp(void) DDRB = 0xff; PORTB = 0xff; DDRD = 0xff; PORTD = 0xff; /* BCD转换1子程序*/ void sz_bcd (char hour, char min,char sec) ledbuff0=tablesec%10; ledbuff1=tablesec/10%10; ledbuff2=0x40; ledbuff3=tablemin%10; ledbuff4=tablemin/10%10; ledbuff5=0x40; ledbuff6=tablehour%10; ledbuff7=tablehour/10%10; void main(void) init_disp(); init_t0(); while (1) sz_bcd(hour, min,sec); display(); 四、实验指导本实验采用系统时钟,有误差存在。本例程序提供了用于显示时、分、秒的显示子程序函数,读起来可能有困难,但这并不影响做本实验。目的是了解定时器T/C0的应用。 五、实验拓展本实验只采用了定时器T/C0溢出中断实现时、分、秒,还有其它方法可自行研究,比如采用定时器T/C1溢出中断或者采用定时器T/C2溢出比较匹配中断等来实现时钟显示。实验七 高频脉冲频率的测量一、实验目的与任务 1 实验目的 了解高频测量的意义; 进一步熟悉定时/计数器的计数原理; 掌握定时/计数器的设置; 能解读程序。2实验任务测量高频信号的频率。由T2实现1s定时,T1测量555振荡器所产生信号在1s内的方波数即是频率。测出的频率由数码管显示出来。555振荡器所产生信号的频率可通过电位器RW1来调整。二、实验接线用跳线将CJ8右边两针相连,用单线连接CJ8的左边和PB.1,用单线连接CJ12的右边和PB.0;将7219W接口与LEDW接口用扁平线相连,将7219D接口与LEDD接口用扁平线相连。使用7219芯片控制的8位8段数码显示器显示频率。硬件电路如图18所示。图14 实验七硬件电路连接图三、程序设计#include #include interrupt TIM2_OVF void timer2_ovf_isr(void)int x;x=TCNT1;TCNT1=0;xunce_7219(0,x,0);PORTD=PORTD;void main(void) char i;DDRB.1=0;PORTB.1=1;PORTD=0xff;DDRD=0xff;ASSR=0x08;/使用外部32768晶振TCCR2=0x05; /128分频TCCR1B=0x06;/T1计数模式(PB1下降沿有效)TIMSK=0x40;/T2中断分开关#asm(sei)spi_7219(); for(i=0;i8;i+)spi_xie(i+1,15);spi_xie1(i+1,0); /消隐 while (1) / Place your code here ; 四、实验指导555振荡器所产生方波信号引到PB.1引脚作为TC1计数器的输入脉冲TC1也不需要中断服务。 TC2利用异步时钟作为信号源。产生1s的精确定时。如果TC2利用系统时钟产生1s定时,系统时钟产生的定时达不到1s,要用变量计数中断次数来扩展。实验八 低频脉冲频率的测量一、实验目的与任务 ;1 实验目的 了解低频测量的意义; 进一步熟悉定时/计数器的事件捕获原理; 能解读程序。2 实验任务测量低频信号的频率。二、实验原理与方法由T/C0产生方波信号属于低频信号,要测量其波形的频率,可将T/C1设置成计数方式,计数来自于内部时钟源,T/C0产生的方波信号作为T/C1的输入捕获信号,触发T/C1的输入捕获功能。显然,T/C1的两次捕获值之差微T/C0发出方波信号的周期。设T/C1两次捕获值之差为N,T/C1的计数频率为fT1,则T/C0发出方波信号的频率为:fT0= fT1/N三、实验接线将7219W接口与LEDW接口用扁平线相连,将7219D接口与LEDD接口用扁平线相连。使用7219芯 片控制的8位8段数码显示器显示频率。将PB3与PD6用短路线连接,硬件电路如图19所示。图15 实验八硬件电路连接图四、程序设计#include #include #include int x;/ Timer 1 input capture interrupt service routineinterrupt TIM1_CAPT void timer1_capt_isr(void)/ Place your code hereTCNT1=0;x=ICR1;x=6250000/x; void main(void) char i;PORTA=0x00;DDRA=0x00;PORTB=0x00;DDRB=0x08;PORTC=0x00;DDRC=0x00;PORTD=0x00;DDRD=0x00;TCCR0=0x1B;TCNT0=0x00;OCR0=0x7f;TCCR1A=0x00;TCCR1B=0x03;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;TIMSK=0x20;ACSR=0x80;SFIOR=0x00;/ Global enable interrupts#asm(sei)spi_7219();for(i=0;i8;i+)spi_xie(i+1,15),spi_xie1(i+1,0);while (1) / Place your code here delay_ms(1000); xunce_7219(0,x,2); ; 五、实验指导低频脉冲频率的测量,是利用了TC1的输入捕获功能。TC1的输入捕获触发引脚为PD6,输入捕获信号源为TC0的OC0(PB3)引脚输出的方波,要会计算TC0输出波形的频率。六、实验扩展本实验的频率较高,N没有产生溢出,如果测量的信号频率较低,T1会产生溢出,测量就不正确了。完整的测量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国家公务员录用考试《行政职业能力测验》题库(附答案)
- 2025年中级银行从业资格之中级个人理财自测模拟预测题库名校卷(含答案)
- 江苏省徐州市2024-2025学年七年级下学期期末语文试题(解析版)
- 摄影师配色基础知识培训课件
- 2025有关服装品牌专卖店加盟合同的范本
- 搬运工消防知识培训课件
- 公司股权知识培训
- 公司组织化工知识培训课件
- 农业AI的“黑暗恐惧”:无光温室革命何以颠覆万亿级能源逻辑
- 智慧求职掌握行业新动态:青州银行面试题及答案指导
- 供应商尽职调查报告(模板)
- 三通四通尺寸数据及标准表
- 2025-2030年中国保暖内衣品牌市场动态及发展竞争力研究报告
- 2025年“十五五”金融规划研究白皮书
- 铝屑清扫安全管理制度
- 催收机房设备管理制度
- 药学礼仪知识培训课件
- 四川省事业单位公开招聘工作人员公共科目〈综合知识〉笔试考试大纲笔试历年典型考题及考点剖析附带答案详解
- 《保障中小企业款项支付条例(2025新修订)》知识培训
- 房地产大宗购买合作合同书
- 管道清淤施工方案
评论
0/150
提交评论