网站大量收购独家精品文档,联系QQ:2885784924

第4讲自己动手学习单片机系列 训练第一个项目.pptVIP

第4讲自己动手学习单片机系列 训练第一个项目.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4讲自己动手学习单片机系列 训练第一个项目

第4讲 第一个项目 本章重点 单片机开发项目流程 程序编译步骤 HEX文件下载步骤 熔丝位的修改步骤 材料清单 1、最小系统板 2、+5V电源 3、轩微(V6.0普通版或增强版)或双龙ISP下载线一条。推荐轩微下载线普通版(20元),或增强版(45元),双龙的128元。 4、面包板跳线一捆。 项目的建立流程 项目规划,规划硬件线路,焊接电路板 检查硬件有无连接错误 按照硬件电路,编写相应的软件程序 编译程序,生成单片机可以执行的HEX文件 语法错误:该步可以检查出。 逻辑错误:该步不能检查出。 下载HEX文件到单片机 观察运行情况,修改逻辑错误和硬件错误。重回第二步。直到没有逻辑错误。 形成最终产品 第一个项目:程序下载和I/O口使用 项目要求:要求I/O口的PB0连接的发光二极管(LED)闪烁。 项目考虑 当PB0输出高电平(5v)发光二极管导通(亮);当PB0输出低电平(0v)发光二极管截止(灭)。 普通LED发光二极管允许5-15mA的电流,导通时,电阻接近0,因此为保证流过二极管的电流在5-15mA内,串接470Ω电阻。 为了保证能看到亮灭交替,亮灭之间要有一定的延时。 需要将HEX文件下载到单片机运行。所以必须有程序下载电路。 为了保证单片机运行,必须给单片机通上5v电源。 硬件规划与焊接 avr系列单片机内部有RC振荡电路,产生大约1MHz的时钟信号。对于简单的应用,为降低开发成本,缩小电路规模,可采用片内时钟。本例利用单片机内部时钟信号。为了告诉编译器CPU时钟信号频率,采用以下语句 #define F_CPU 1000000UL 告诉编译器,CPU时钟信号的频率是1MHz,UL代表无符号长整数 I/O口的三个寄存器 DDRX: 8位数据方向寄存器,每一位代表一个引脚,该位设为1,表示该引脚输出,设为0,表示该引脚输入。例如 //PA口的PA0,PA2,PA5输出,其它引脚为输入。 DDRA=0b0010,0101; 注:1、X可用A,B,C,D中的任一个代替。 2、每个引脚可单独配置。 PORTX: 8位I/O口数据寄存器,一旦端口设为输出,把数据放于该寄存器中,则数据立刻出现在端口上。例如 DDRA=0b0000,0011;//PA0,PA1输出 PORTA = 0b0000,0010; //PA0输出低电平,PA1高电平 PINX:获取引脚电平寄存器。不管DDRX配置为输入还是输出,都可以通过该寄存器读引脚电平。例如 //判断PB1脚是高电平 if(PINB == 0B0000,0010) { … } 使用DDRX,PORTX,PINX时注意 空引脚最好设为一固定电平。为了降低功耗,一般是上拉电阻使能状态。{DDXn,PORTXn}=0b01,PUD(SFIOR)=1; 给引脚赋予某一固定电平后,接着读引脚电平中间必须加nop指令 PORTA = 0x27; 中间必须加nop指令。 level = PINA; 不要动别人的奶酪 实际使用I/O端口时,经常会每个端口有各自的功能,初学者往往犯的错误是在写某个端口时同时修改了其它端口。 举例 PB0用作输出,来控制继电器动作。PB1口用作输入,来读取光电门电平。 错误写法: 正确写法: DDRB = 0x01; DDRB |= 0x01; PORTB = 0x01; PORTB |= 0x01; … … DDRB = 0xfd; DDRB = 0xfd; If(PINB == 0x01) If((PINB 0x01)== 0x01) … … 为防止以上错误,某位置1,用“|”运算;某位清零,用运算。 编写软件 #define F_CPU 1000000UL #includeavr/io.h //关于输入输出端口的定义在此头文件中 #includeutil/delay.h //延时函数的定义在此头文件 int main(void) //为符合ansi标准,请在括号内加上void { DDRB |= 0x01; //定义B口的PB0为输出 PORTB |= 0x01; //PB0输出高电平,点亮LED _delay_ms(200); //持续200ms while(1) { PORTB ^= 0x01; //通过异或运算实现取反操作 _delay_ms(200); //让亮或暗持续200ms } return(0); //作为一个好习惯应该保留该语句 } 思考题:若要用开发板上的8M时钟,应该修改哪儿?(注意不要改错熔丝位,否则很容易锁死MCU) 编译程序 第一步:打开avrstudio4,看到下图,点New P

文档评论(0)

hello118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档