AVR入门实验.doc_第1页
AVR入门实验.doc_第2页
AVR入门实验.doc_第3页
AVR入门实验.doc_第4页
AVR入门实验.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一课(14课时)讲课内容:1. 单片机的内部结构2. 讲述单片机开发流程(软件,硬件)3. 讲述实验板子上芯片选型4. 讲述开发板上面各部分功能,熟悉开发板的结构5. 讲述RS232基础知识6. 讲述开发板串口部分原理图以及MAX232芯片手册内容(MAX232是由MAX公司生产的,工作在5V环境下的RS232串口芯片,还有工作在3.3V的RS232接口芯片,如SP3232)7. 讲述芯片手册M16串口部分内容8. 做实验,讲库函数include的路径等问题实验内容:一实验名称:串口输出实验二实验内容: 熟悉RS-232接口标准及特点,实现Atmega16串口与PC机通信,完成将字符串从单片机传输到PC机。三实验目的:1. 熟悉AVR单片机开发环境Winavr2. 掌握程序下载过程,学会使用双龙下载软件3. 能够对照芯片手册,看懂已知程序四实验代码:#include #include stdio.h#include interrupt.h/#include .avrinterrupt.h#define uchar unsigned char#define uint unsigned intvoid put_c(unsigned char c) ;void put_s(unsigned char *ptr);void cpu_init(void) cli(); UCSRC &= (1URSEL) ; UBRRH = 0x00; UBRRL = 0x33; / 波特率9600 UCSRA = 0x00; UCSRB=(1RXEN)|(1TXEN); /发送接收使能,使用查询方式,故没有使能中断 UCSRC = (1URSEL)|(1USBS)|(3UCSZ0); /0x06 8位数据,1位停止位,无校验 int main(void)cpu_init();put_s(Hellow Word!);return 0;void put_c(unsigned char c) /发送采用查询方式while( !(UCSRA & (1UDRE) );UDR=c;void put_s(unsigned char *ptr)while (*ptr)put_c(*ptr+);put_c(0x0D);put_c(0x0A); /结尾发送回车换行第二课(58课时)讲述内容:1.讲述如何建立开发环境,Winavr以及双龙下载软件的安装使用2.讲述makefile文件的注意事项3.分析上节课串口实验程序(对比芯片手册寄存器部分进行分析)4.M16芯片手册IO部分讲解,包括电器特性部分,重点解释学习电器特性的原因(设计产品需要考虑输入输出功耗,以及芯片能够驱动多大的负载)5.组织学生自写代码,控制LED点亮实验内容:实验名称:AVR单片机控制I/O实验1(LED闪烁实验)实验内容:初始化AVR单片机Atmega16的I/O端口,实现实验板上的LED闪烁。实验目的:1了解Atmega16的I/O端口输出原理2掌握Atmega16端口寄存器的配置实验代码:#include int main(void) unsigned int i,j,k; DDRA=0xFF;PORTA=0xFF; /_NOP; while (1) PORTA &=(1PA0); for(i=0;i1000;i+) for(j=0;j20000;j+); PORTA|=(1PA0); for(k=0;k1000;k+) for(i=0;i20000;i+); 第三课(912课时)讲述内容: 1.讲述数码管的内部结构。 (1)区分七段、八段数码管 (2)熟悉单个数码管与三位、四位一体数码管 (3)识别共阴、共阳极数码管 2.讲述数码管的功耗问题。 3.讲解开发板数码管部分原理图。 4.组织学生自己编写程序,实现数码管扫描现实09999。 实验内容: 实验题目: AVR单片机控制I/O实验2(数码管显示实验) 实验内容: 初始化AVR单片机Atmega16的I/O端口,实现实验板上的数码管显示。 实验目的: 1了解数码管的基本结构 2掌握单片机控制数码管的原理 实验代码: #include void dely(int m) int i,j; for(i=0;im;i+) for(j=0;j=10000) i=0; point_c(i); 第四课(1316课时)讲述内容:1. 两种当前主流液晶屏:TFT液晶屏和STN液晶屏2. “裸屏”不带有控制器的LCD,LCM带有控制器等外围电路的LCD 3. LCD控制器种类:串行,并行4. 控制器有独立的,也有MCU自带的,如2410 5. 下载字模软件(ourdev网站有),通过其中一款字模软件讲述LCD现实汉字的过程6. 讲述LCD控制器PCD8544芯片手册7. 讲解开发板LCD5510部分原理图8. 根据原理图以及PCD8544芯片手册,讲解实验程序课外知识:1.百度上面关于“液晶”的知识:/view/6262.htm2.百度上面关于TFT液晶屏的知识:/view/6261.html3.百度上面关于STN液晶屏的知识:/view/1023804.htm4.百度上面关于LCM液晶屏的知识:/view/115163.htm实验题目:LCD显示实验实验内容:初始化实验板上的LCD,实现LCD汉字显示。实验目的:1.了解LCD显示屏的显示原理2.了解单片机对LCD控制器的控制原理3.掌握字模工具的使用实验代码:#include /#include #include Define.h#include 5110.h/*/void Delay_us(unsigned int time)while(time-);void Delay_ms(unsigned int time)while(time-)Delay_us(1000);void main(void) LCD_init();/初始化液晶 LCD_clear();SETBIT(DDRC,BACKLED_EN); /配置背光控制端口CLEARBIT(PORTC,BACKLED_EN);/使能背光while(1) LCD_clear();LCD_write_english_string(0,0,-ADEmbed-);LCD_write_english_string(0,5,www.);LCD_write_english_string(21,5,adembed.);LCD_write_english_string(66,5,com);LCD_write_chinese_string(0,3,12,7,0,0);Delay_ms(5000);LCD_clear();LCD_draw_bmp_pixel(0,0,AVR_bmp,48,24);Delay_ms(2000); /*/ void LCD_init(void)/先设置为输出 SETBIT(LCD_DIR,SCLK); SETBIT(LCD_DIR,SDIN); SETBIT(LCD_DIR,LCD_DC); SETBIT(LCD_DIR,LCD_CE);/完成DDRB=1111 0000 /SETBIT(LCD_DIR,LCD_RST); / 产生一个让LCD复位的低电平脉冲 /CLEARBIT(LCD_PORT,LCD_RST);/LCD_RST = 0; /delay_1us();/SETBIT(LCD_PORT,LCD_RST);/LCD_RST = 1; / 关闭LCDCLEARBIT(LCD_PORT,LCD_CE);/LCD_CE = 0; delay_1us();/ 使能LCDytSETBIT(LCD_PORT,LCD_CE);/LCD_CE = 1; delay_1us(); LCD_write_byte(0x21, 0);/ 使用扩展命令设置LCD模式 LCD_write_byte(0xc8, 0);/ 设置偏置电压 LCD_write_byte(0x06, 0);/ 温度校正 LCD_write_byte(0x13, 0);/ 1:48 LCD_write_byte(0x20, 0);/ 使用基本命令 LCD_clear(); / 清屏 LCD_write_byte(0x0c, 0);/ 设定显示模式,正常显示 / 关闭LCD CLEARBIT(LCD_PORT,LCD_CE);/LCD_CE = 0;/*/void LCD_clear(void) unsigned int i; LCD_write_byte(0x0c, 0); LCD_write_byte(0x80, 0); for (i=0; i504; i+) LCD_write_byte(0, 1);/*/void delay_1us(void) /1us延时函数 unsigned int i; for(i=0;i12000;i+);/*/void LCD_set_XY(unsigned char X, unsigned char Y) LCD_write_byte(0x40 | Y, 0);/ column LCD_write_byte(0x80 | X, 0);/ row/*/void LCD_write_char(unsigned char c) unsigned char line; c -= 32; for (line=0; line6; line+) LCD_write_byte(font6x8cline, 1);/*/*-LCD_write_english_String : 英文字符串显示函数输入参数:*s :英文字符串指针; X、Y : 显示字符串的位置,x 0-83 ,y 0-5-*/void LCD_write_english_string(unsigned char X,unsigned char Y,char *s) LCD_set_XY(X,Y); while (*s) LCD_write_char(*s); s+; /*/*-LCD_write_chinese_string: 在LCD上显示汉字输入参数:X、Y :显示汉字的起始X、Y坐标; ch_with :汉字点阵的宽度 num :显示汉字的个数; line :汉字点阵数组中的起始行数 row :汉字显示的行间距 X :列 Y :行 -*/ void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row) unsigned char i,n; LCD_set_XY(X,Y); /设置初始位置 for (i=0;inum;) for (n=0; nch_with*2; n+) /写一个汉字 if (n=ch_with) /写汉字的下半部分 if (i=0) LCD_set_XY(X,Y+1); else LCD_set_XY(X+(ch_with+row)*i),Y+1); LCD_write_byte(HZKline+in,1); i+; LCD_set_XY(X+(ch_with+row)*i),Y); /*/*-LCD_draw_map : 位图绘制函数输入参数:X、Y :位图绘制的起始X、Y坐标; *map :位图点阵数据; Pix_x :位图像素(长) Pix_y :位图像素(宽)-*/void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y) unsigned int i,n; unsigned char row; if (Pix_y%8=0) row=Pix_y/8; /计算位图所占行数 else row=Pix_y/8+1; for (n=0;nrow;n+) LCD_set_XY(X,Y); for(i=0; iPix_x; i+) LCD_write_byte(mapi+n*Pix_x, 1); Y+; /换行 /*/*-LCD_write_byte : 写数据到LCD输入参数:data :写入的数据; command :写数据/命令选择;-*/void LCD_write_byte(unsigned char dat, unsigned char command) unsigned char i;CLEARBIT(LCD_PORT,LCD_CE);/ 使能LCD_CE = 0 if (command = 0) CLEARBIT(LCD_PORT,LCD_DC);/ 传送命令 LCD_DC = 0; else SETBIT(LCD_PORT,LCD_DC);/ 传送数据LCD_DC = 1;for(i=0;i8;i+)if(dat&0x80)SETBIT(LCD_PORT,SDIN);/SDIN = 1;elseCLEARBIT(LCD_PORT,SDIN);/SDIN = 0;CLEARBIT(LCD_PORT,SCLK);/SCLK = 0;dat = dat 1;SETBIT(LCD_PORT,SCLK);/SCLK = 1; SETBIT(LCD_PORT,LCD_CE);/LCD_CE = 1;第五课(1720课时)讲课内容:1 中断的响应时间就是中断的响应过程的时间,中断的响应过程是当有事件产生,进入中断之前必须先记住当前正在做的事情,然后去处理发生的事情,处理这个过程的时间,叫做中断相应时间。计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。基本定义就是:从发出中断请求到进入中断处理所用的时间。2 计算机接收到中断信号到操作系统作出响应,并完成切换转入中断服务程序的时间。对于占先式内核,要先调用一个特定的函数,该函数通知内核即将进行中断服务,使得内核可以跟踪中断的嵌套。占先式内核的中断响应时间由下式给出:中断响应时间关中断的最长时间保护CPU内部寄存器的时间进入中断服务函数的执行时间开始执行中断服务例程(ISR)的第一条指令时间中断响应时间是系统在最坏情况下响应中断的时间,某系统100次中有99次在50ms之内响应中断,只有一次响应中断的时间是250ms,只能认为中断响应时间是250ms。3 中断响应可以分为以下几个步骤:(1)保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。(2)寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。(3)执行中断处理程序。(4)中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。中断的实时性是实时系统的一个重要方面。中断响应时间是影响中断实时性的主要因素。4 Atmega16芯片手册“中断”章节,讲述中断机制,形式,方式。5 讲述Winavr开发环境库函数中,与中断有关的库,以及如何调用这些库函数。6 讲述Atmega16芯片手册“USART”章“数据接收USART接收器”节。7 组织学生编写M16串口接收中断程序,程序最终实现效果为通过PC机“串口调试助手”发送数据到M16,M16通过串口将数据转发至PC机“串口调试助手”。(因为RS232是全双工通信)。实验内容:实验题目:串口接收中断实验实验内容:熟悉RS-232接口标准及特点,实现Atmega16串口与PC机通信,完成单片机接收PC机串口发送的数据。实验目的:1 掌握单片机中断产生的机制2 掌握单片机中断的处理过程3 掌握AVR单片机串口接收中断实验代码:#include #include delay.h#include stdio.h#include interrupt.h#include signal.h#define uchar unsigned char#define uint unsigned intunsigned char t;void put_c(unsigned char c) ;void put_s(unsigned char *ptr);void cpu_init(void) cli(); /在GCC书中用于清零中断UCSRC &= (1URSEL) ; UBRRH = 0x00; UBRRL = 0x33; / 设置波特率寄存器波特率9600 UCSRA = 0x00;/控制和状态寄存器a UCSRB=(1RXEN)|(1TXEN)|(1RXCIE); /控制和状态寄存器b 发送接收使能,使用查询方式,故没有使能中断 UCSRC = (1URSEL)|(1USBS)|(3UCSZ0); /控制和状态寄存器c 0x06 8位数据,1位停止位,无校验 sei(); int main(void) cpu_init(); /put_s(Hello Word!); return 0; while(1);void put_c(unsigned char c) /发送采用查询方式 while( !(UCSRA & (1UDRE) );/UDRE标志是否准备好 UDR=c;/将字符C存入数据寄存器void put_s(unsigned char *ptr) while (*ptr) put_c(*ptr+); put_c(0x0D); put_c(0x0A); /结尾发送回车换行SIGNAL(SIG_UART_RECV)/接收结束中断 t=UDR; switch(t) case a: put_s(you press a);break; case b: put_s(you press b);break; case c: put_s(you press c);break; default: put_s(you press error);break; 第六课(2124课时)讲课内容:1.引起中断的事件称为中断源。中断源向CPU提出处理的请求称为中断请求。发生中断时被打断程序的暂停点成为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行有关的中断处理程序称为中断处理。2.在微机系统中,对于外部中断,中断请求信号是由外部设备产生,并施加到CPU的NMI (Non Maskable Interrupt不可屏蔽中断(即CPU不能屏蔽)或INTR(Interrupt Require)引脚上,CPU通过不断地检测NMI和INTR引脚信号来识别是否有中断请求发生。对于内部中断,中断请求方式不需要外部施加信号激发,而是通过内部中断控制逻辑去调用。无论是外部中断还是内部中断,中断处理过程都要经历以下步骤:请求中断响应中断关闭中断保留断点中断源识别保护现场中断服务子程序恢复现场中断返回。(1)请求中断当某一中断源需要CPU为其进行中断服务时,就输出中断请求信号,使中断控制系统的中断请求触发器置位,向CPU请求中断。系统要求中断请求信号一直保持到CPU对其进行中断响应为止。(2)中断响应CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地址,执行中断服务子程序。对于外部中断,CPU在执行当前指令的最后一个时钟周期去查询INTR引脚,若查询到中断请求信号有效,同时在系统开中断(即IF1)的情况下,CPU向发出中断请求的外设回送一个低电平有效的中断应答信号,作为对中断请求INTR的应答,系统自动进入中断响应周期。(3)关闭中断CPU响应中断后,输出中断响应信号,自动将状态标志寄存器FR或EFR的内容压入堆栈保护起来,然后将FR或EFR中的中断标志位IF与陷阱标志位TF清零,从而自动关闭外部硬件中断。因为CPU刚进入中断时要保护现场,主要涉及堆栈操作,此时不能再响应中断,否则将造成系统混乱。(4)保护断点保护断点就是将CS和IP/EIP的当前内容压入堆栈保存,以便中断处理完毕后能返回被中断的原程序继续执行,这一过程也是由CPU自动完成。(5)中断源识别当系统中有多个中断源时,一旦有中断请求,CPU必须确定是哪一个中断源提出的中断请求,并由中断控制器给出中断服务子程序的入口地址,装入CS与IP/EIP两个寄存器。CPU转入相应的中断服务子程序开始执行。(6)保护现场主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容压入堆栈保护起来,再进入的中断处理。现场保护是由用户使用PUSH指令来实现的。(7)中断服务中断服务是执行中断的主体部分,不同的中断请求,有各自不同的中断服务内容,需要根据中断源所要完成的功能,事先编写相应的中断服务子程序存入内存,等待中断请求响应后调用执行。(8)恢复现场当中断处理完毕后,用户通过POP指令将保存在堆栈中的各个寄存器的内容弹出,即恢复主程序断点处寄存器的原值。(9)中断返回在中断服务子程序的最后要安排一条中断返回指令IRET,执行该指令,系统自动将堆栈内保存的IP/EIP和CS值弹出,从而恢复主程序断点处的地址值,同时还自动恢复标志寄存器FR或EFR的内容,使CPU转到被中断的程序中继续执行。中断的响应过程如图6.3所示。3. 软中断与硬中断的区别软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和信号有些类似,同时,软中断又是和硬中断相对应的,硬中断是外部设备对CPU的中断,软中断通常是硬中断服务程序对内核的中断,信号则是由内核(或其他进程)对某个进程的中断(Linux内核源代码情景分析第三章)。“软中断就是用软件来中断!硬中断是面向硬件的”(1)从发生时间上来说,软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的 (2)从触发条件来说,软中断是由程序调用发生的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论