




免费预览已结束,剩余40页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章AVR通用I O编程 三 AVR通用I O口 有PORTA PORTB PORTC PORTD 简称PA PB PC PD 4组8位 共32路通用I O接口 分别对应于芯片上32根I O引脚 所有这些I O口都是双 有的为3 功能复用的 其中第一功能均作为数字通用I O接口使用 而复用功能则分别用于中断 时钟 计数器 USRAT I2C和SPI串行通信 模拟比较 捕捉等应用 1 I O口结构 三 AVR通用I O口 结构图 1 I O口结构 三 AVR通用I O口 DDRx 控制I O口的输入输出方向 即控制I O口的工作方式为输出方式还是输入方式 当DDRx 1时 I O口处于输出工作方式 此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚 1 I O口结构 三 AVR通用I O口 当PORTx 1时 I O引脚输出高电平 可提供输出20mA的电流 而当PORTx 0时 I O引脚呈现低电平 同时可吸纳20mA电流 AVR的I O在输出方式下提供了比较大的驱动能力 可以直接驱动LED等小功率外围器件 PORTx 数据输出寄存器 Pin 数据读入寄存器 1 I O口结构 三 AVR通用I O口 当DDRx 0时 I O处于输入工作方式 此时引脚寄存器PINx中的数据就是外部引脚的实际电平 通过读I O指令可将物理引脚的真实数据读入MCU 此外 当I O口定义为输入时 DDRx 0 通过PORTx的控制 可使用或不使用内部的上拉电阻 1 I O口结构 三 AVR通用I O口 表中的PUD为寄存器SFIOR中的D2位 它的作用相当AVR全部I O口内部上拉电阻的总开关 当PUD 1时 AVR所有I O内部上拉电阻都不起作用 全局内部上拉无效 而PUD 0时 各个I O口内部上拉电阻取决于PORTXn的设置 1 I O口结构 三 AVR通用I O口 Atmega通用I O特点 双向可独立位控的I O口ATmega16的PA PB PC PD四个端口都是8位双向I O口 每一位引脚都可以单独的进行定义 相互不受影响 如用户可以在定义PA口第0 2 3 4 5 6位用于输入的同时定义第1 7位用于输出 互不影响 Push Pull大电流驱动 最大40mA 每个I O口输出方式均采用推挽式缓冲器输出 提供大电流的驱动 可以输出 吸入 20mA的电流 因而能直接驱动LED显示器 可控制的引脚内部上拉电阻当I O口被用于输入状态 且内部上拉电阻被激活 有效 时 如果外部引脚被拉低 则构成电流源输出电流 uA量级 DDRx可控的方向寄存器 1 I O口结构 三 AVR通用I O口 I O口使用注意事项 1 使用AVR的I O口 首先要正确设置其工作方式 确定其工作在输出方式还是输入方式 2 当I O工作在输入方式 要读取外部引脚上的电平时 应读取PINxn的值 而不是PORTxn的值 3 当I O工作在输入方式 要根据实际情况使用或不使用内部的上拉电阻 如能利用AVR内部I O口的上拉电阻 可以节省外部的上拉电阻4 一旦将I O口的工作方式由输出设置成输入方式后 必须等待一个时钟周期后才能正确的读到外部引脚PINxn的值 5 每次读写I O前都要先配置DDRx寄存器 2 I O口寄存器 三 AVR通用I O口 每个I O口3个寄存器 共用12个寄存器 2 I O口寄存器 三 AVR通用I O口 下图是PA口寄存器 PORTA DDRA PINA各个位的具体定义 及复位初始值 其它3个口的寄存器的情况与PA口相同 只是地址不一样 3 I O口编程应用 三 AVR通用I O口 一种标准的C程序可以采用以下的写法 defineBIT00 defineBIT77PORTC 1 BIT0 1 BIT3 PC口的第0位和第3位输出 1 其它为 0 1 BIT0 表示逻辑1左移0位 结果为0b00000001 1 BIT3 表示逻辑1左移3位 结果为0b00001000 0b00000001在同0b00001000相或 结果为0b00001001 以上的逻辑运算不产生具体的操作指令 由编译器在编译时运算完成 得到结果 最后只是产生将结果赋值到PORTC寄存器的操作指令 这种表示方法有利于 不同CPU的移植 3 I O口编程应用 三 AVR通用I O口 这种表示方式 比直接赋值0b00001001更容易理解程序的作用 在后面的程序将广泛使用这种表达方法 如对USART串口编程中大量使用了这样的描述方式 defineRXB81 defineTXB80 defineUPE2 defineOVR3 defineFE4 defineUDRE5 defineRXC7 defineFRAMING ERROR 1 FE definePARITY ERROR 1 UPE defineDATA OVERRUN 1 OVR 3 I O口编程应用 三 AVR通用I O口 defineDATA REGISTER EMPTY 1 UDRE defineRX COMPLETE 1 RXC charstatus status UCSRA if status FRAMING ERROR PARITY ERROR DATA OVERRUN 0 接收数据无错误处理过程else 接收数据产生错误处理过程 3 I O口编程应用 三 AVR通用I O口 程序中的UCSRA为ATmega16的串行接口USART的状态寄存器 UPE是UCSRA的第2位 当UPE为1时表示接收到的数据产生了校验错误 程序中采用了定义语句 定义PARITY ERROR为 1 UPE 实际就是0b00000100 因此一旦USART的值为PARITY ERROR时 表示接受的数据产生了校验错误 使程序的阅读非常明了 1 LED发光二极管驱动 三 AVR通用I O口 1 LED发光二极管驱动 三 AVR通用I O口 includevoiddelay unsignedchart 声明函数 voidmain void charposition 0 position PORTA 0 xFF PA 1 LED DDRA 0 xFF PA while 1 PORTA 1 8 position 0 delay 100 定义函数 voiddelay unsignedchart unsignedchara b for a 0 a 100 a for b 0 b t b 2 继电器控制 三 AVR通用I O口 3 步进电机驱动 三 AVR通用I O口 3 步进电机驱动 三 AVR通用I O口 单极3相步进电机有三个磁激励相 分别用A B C表示 每相有一个磁激线圈 通过控制三个磁激线圈电流的通断的先后时间顺序和通断频率就可以改变步进电机的变旋转方向和控制转速 图6 9是单极3相步进电机的原理图 单极3相步进电机有3相3拍和3相6拍两种驱动方式 图6 10给出它们的控制时序图 3相3拍就是A B C三相分别通电 正转为A B C A B C 反转为A C B A C B 每拍转动3 3相6拍中有三拍是两相同时通电 正转为A AB B BC C CA 反转为A AC C CB B BA 每拍转动1 5 3 步进电机驱动 三 AVR通用I O口 3 步进电机驱动 三 AVR通用I O口 单极3相步进电机有三个磁激励相 分别用A B C表示 每相有一个磁激线圈 通过控制三个磁激线圈电流的通断的先后时间顺序和通断频率就可以改变步进电机的变旋转方向和控制转速 图6 9是单极3相步进电机的原理图 单极3相步进电机有3相3拍和3相6拍两种驱动方式 图6 10给出它们的控制时序图 3相3拍就是A B C三相分别通电 正转为A B C A B C 反转为A C B A C B 每拍转动3 3相6拍中有三拍是两相同时通电 正转为A AB B BC C CA 反转为A AC C CB B BA 每拍转动1 5 3 步进电机驱动 三 AVR通用I O口 include includeflashcharstep out 6 0 x04 0 x06 0 x02 0 x03 0 x01 0 x05 voidmain void chari 0 intdelay 500 PORTA 0 x00 DDRA 0 x07 while 1 PORTA step out i if i 6 i 0 delay ms delay 3 数码管显示 并行 三 AVR通用I O口 3 数码管显示 并行 三 AVR通用I O口 假设PA 0 a PA 7 h要显示数字 1 共阴极 PA输出 共阳级 PA输出 与此同时 公共端接法 欲连续显示数字0 9该如何 3 数码管显示 并行 三 AVR通用I O口 3 数码管显示 并行 三 AVR通用I O口 3 数码管显示 并行 三 AVR通用I O口 include includeflashcharled 7 10 0 x3F 0 x06 0 x5B 0 x4F 0 x66 0 x6D 0 x7D 0 x07 0 x7F 0 x6F flashcharposition 6 0 xfe 0 xfd 0 xfb 0 xf7 0 xef 0 xdf chartime 3 时 分 秒计数chardis buff 6 显示缓冲区 存放要显示的6个字符的段码值chartime counter 1秒计数器 全局变量bitpoint on 秒显示标志 全局变量 3 数码管显示 并行 三 AVR通用I O口 voiddisplay void 扫描显示函数 执行时间12ms chari for i 0 i 5 i PORTA led 7 dis buff i if point on 3 3 数码管显示 并行 三 AVR通用I O口 voidtime to disbuffer void 时间值送显示缓冲区函数 chari j 0 for i 0 i 2 i dis buff j time i 10 dis buff j time i 10 voidmain void DDRA 0 xFF PA全部置为输出 PORTA 0 x00 PORTA初始化DDRC 0 x3F PC的低6位置为输出 其他为输入 PORTC 0 x3F PORTC初始化 3 数码管显示 并行 三 AVR通用I O口 time 2 23 time 1 58 time 0 55 时间初值time to disbuffer while 1 display 显示扫描 执行时间12msIf time counter 40 time counter 0 4 point on point on 5 if time 0 60 time 0 0 if time 1 60 time 1 0 if time 2 24 time 2 0 time to disbuffer delay ms 13 延时13ms 可进行其它处理 6 3 数码管显示 串行 三 AVR通用I O口 3 数码管显示 串行 三 AVR通用I O口 3 数码管显示 串行 三 AVR通用I O口 defineHC164 dataPORTA 0 defineHC164 clkPORTA 1voidHC164 send byte charbyte chari for i 0 i 7 i HC164 data byte elseHC164 send byte temp PORTC position i delay ms 2 PORTC 0 xff 4 字符LCD 三 AVR通用I O口 4 字符LCD 三 AVR通用I O口 4 字符LCD 三 AVR通用I O口 函数功能简介 1 voidLCD init void 该函数对LCD进行初始化 将显示位置回到第0行的第0列的起始位置处 函数的参数应是LCD显示器的列数 一行能够显示的字符数 使用LCD显示器时 必须先使用该函数对LCD显示器进行初始化 2 voidLCD clear void 该函数清除LCD的显示 并将显示位置回到第0行的第0列的起始位置处 3 voidLCD write data unsignedchardata 写数据到LCD 4 LCD write char unsignedcharx unsignedchary unsignedchardata 该函数将字符c在当前的显示位置上显示出来 5 voidLCD write str unsignedcharx unsignedchary unsignedchar s 该函数将在从当前的显示位置开始 显示定义在SRAM中的字符串 str为SRAM中定义的字符串的指针 4 字符LCD 三 AVR通用I O口 6 voidLCD write com unsignedcharcom 写命令到LCD 4 字符LCD 三 AVR通用I O口 初始化及主程序 include include lcd1602 h voidmain void unsignedchari unsignedchar p PORTA 0 xFF 打开上拉 DDRA 0 x00 方向输入 PORTB 0 xFF 电平设置 DDRB 0 xFF 方向输出 PORTC 0 x7F DDRC 0 x80 PORTD 0 xFF DDRD 0 x00 delay ms 100 LCD init while 1 i 1 p LCD 1602 test LCD clear LCD write str 5 0 Welcome delay ms 250 while p LCD write char i 1 p i p delay ms 250 delay ms 250 4 字符LCD 三 AVR通用I O口 初始化及主程序 include defineRS CLRPORTD 4 字符LCD 三 AVR通用I O口 延时函数 voiddelay ms unsignedchari unsignedchara b for a 1 a i a for b 1 b b 显示屏命令写入函数 voidLCD write com unsignedcharcom RS CLR RW CLR EN SET PORTB com delay us 5 EN CLR 4 字符LCD 三 AVR通用I O口 显示屏命令写入函数 voidLCD write data unsignedchardata RS SET RW CLR EN SET PORTB data delay us 5 EN CLR 显示屏清空显示 voidLCD clear void LCD write com 0 x01 delay
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省襄阳市谷城县襄阳东津新区汉水小学2024-2025学年六年级下学期期末数学试题(无答案)
- 河南省开封市等2地2025-2026学年高二上学期开学考试地理试卷(含答案)
- 福建省福州市马尾区2024-2025学年八年级上学期期中语文试题(含答案)
- 智慧供应链题库及答案
- 2025年商超货架合作协议书
- 老师考试难题及答案
- 扶贫脱贫政策知识培训会课件
- 打击乐托班课件
- 戎戎变法课件
- 2025年阳泉化学中考试卷及答案
- 2025-2030中国冲锋衣行业发展趋势与投资战略研究报告
- 魔方公寓管家管理制度
- 食品与营养课程课件
- 林长制知识培训课件
- 高效氯胺酮合成路线研究-深度研究
- 落实临床危急值管理制度
- CNAS-CC02:2013 产品、过程和服务认证机构要求
- 人事行政部每月工作总结
- 现代科技在雕塑工艺中的应用研究
- 《工业自动化控制系统基础》课件
- 概率论与数理统计电子教案
评论
0/150
提交评论