ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:76.37KB ,
资源ID:9417836      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9417836.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验2单片机C语言程序结构.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验2单片机C语言程序结构.docx

1、实验2单片机C语言程序结构实验2单片机C语言程序结构实验名称:单片机C语言程序结构姓名: 学号:实验班号: 机器号:一实验目的1.掌握单片机C语言程序结构;2.掌握单片机C语言程序调试方法;3.掌握MSP430FG2553基本I/O控制方法。二实验基本任务1.练习调试程序1. 练习调试程序 用跳线块将实验板上的 8 个发光二极管的控制端 L8L1 与单片机的 8 个引脚 P2.7P2.0 相连。编写的程序 L2_debug.C 如程序清单,功能是控制与单片机相连接的 8 个发光二极管在全亮与全灭这两种状态下循环变换。该程序没有语法上的错误,但运行后不能产生上述现象,请上机调试其中的问题,指出并

2、修改程序的问题。总结调试程序的方法,比较 G、step over、step into 和断点运行等几种执行命令的不同,如何有效应用这些命令进行调试。 实验板线路连接情况如下在运行了讲义所提供的L2_debug.C后,发现如下问题:(1)代码中“P1”应该改为“P2”,因为这里我们用端口2来连接发光二极管。(2)代码中缺少循环语句,应该加入循环体来使程序不断运行。(3)程序延时的时间过短,导致难以观察到发光二极管的发光现象,应该将延时时间调长,若要如此做,应该变量j的类型也应该设置为int型,以使其可取到更大的值。(4)程序未将P2设置为基本IO,应该将P2SEL与P2SEL2设为0x00。(5

3、)未初始化P2OUT的值,可能出现隐患(虽然在该程序中未出现)。(修改后的实验1程序代码见程序清单)调试程序的方法:(1)利用GO直接运行程序,同时查看实验的现象,检查程序中用到的端口寄存器、变量等的变化,查找程序中的问题。(2)设置断点,再使用,使程序运行到断点处,同时查看实验的现象,检查程序运行到断点处后程序中用到的端口寄存器、变量等的变化,查找程序中的问题。(3)利用Step over与Step into运行单条或几条语句,同时查看实验的现象,检查运行前后程序中用到的端口寄存器、变量等的变化,查找程序中的问题。思考:在修改后的 L2_debug.C 基础上, 比较程序用 Step ove

4、r(F10)和 Step into(F11) 单步执行函数 delay() 有何不同。答:用Step over单步执行delay(),则delay()直接执行完成,用Step into单步执行delay(),则会“进入”到delay()内部,每使用一次Step into,就执行其内部的一条语句。2.控制发光二极管的显示变化(实验2程序代码见程序清单)在任务 1 的连线基础上,编写一个程序控制 8 个发光二极管按下面的 2 种规律循环变换,即 规律 1规律 2规律 1规律 2 ,如此循环反复。 1) 规律 1:8个LED灯从 L5L8L1L4 L3L2L7L6 一个一个单独点亮,每次只有一个灯亮

5、,其他灯灭; 2) 规律 2:8个LED灯两两点亮,顺序为 L6 和 L4,L5 和 L3,L7 和 L1,L8 和 L2,每次只有两个灯亮,其他灯灭。实验板线路连接情况如下思考:如果选择用单片机的P1端口控制8个发光二极管,如何在实验板上设计连线、并编程实现任务2的功能? 答:如果要使用P1端口控制8个发光二极管,应该将P1.0P1.7与L1L8相连,将实验2程序代码中的“P2”全部用“P1”代替。3.用按键控制发光二极管的显示变化(实验3程序代码见程序清单)在任务2基础上,增加2个按键与单片机的引脚相连,编程实现由按键控制发光二级管的显示变化:当按下实验板上的K5键时,8个发光二极管按任务

6、2中的规律1变化;当按下实验板上的K2键时,8个发光二极管按任务2中的规律2变化。要求每按下一次键,蜂鸣器响一下,用声音提示单片机接收到按键操作。 线路连接情况如下三提高任务4.用按键控制步进电机转动(实验4(1)与4(2)程序代码见程序清单)参看步进电机工作原理实验课件,了解控制步进电机工作方法。完成: 1) 设计单片机 msp430G2553 控制步进电机的电路连线,编程控制电机正转、反转各一圈,并 测试用四拍法控制电机转一圈需要多少步。 注意:每步之后需用 for(i=0; iK; i+)延时一会,K 的参考取值约在 0x1500xFFF 之间,太小(如 K0xFFF),电机转动不宜观察

7、。 经过实验,发现用四拍法让电机转一圈需要256步(延时为0x1f0时)。2) 在 1)的基础上增加按键控制:按下 K6 键电机顺时针转动(正转);按下 K3 键电机逆时针转 动(反转);按下 K1 键电机停转。每按下一次键,蜂鸣器响一下,用声音提示接收到按键信息。 线路连接情况如下5.用八拍法控制步进电机转动(实验5程序代码见程序清单)上网查找资料或参看课件,了解用八拍控制步进电机转动的原理和方法,编程实现用八拍法控制电机转动一圈。根据实验发现用八拍法让电机转动一圈需要256步(延时为0x1f0时)。线路连接情况如下五附录:程序清单(1)L2_debug.C#include “io430.h

8、”void delay( );int main(void) WDTCTL = WDTPW + WDTHOLD; /关闭看门狗 P1DIR=0xff; /设置端口1为输出方向 P1OUT=P1OUT; / 将端口1的值取反后输出 delay( ); /调用函数延时void delay() /延时函数 unsigned char j; for(j=0;j=5;j+)(2)实验1程序(修改后)#include io430.hvoid delay();int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WD

9、TPW + WDTHOLD; P2SEL = 0x00; P2DIR = 0xff; while(1) P2OUT = P2OUT; delay(); ; return 0;void delay() unsigned int j; for(j=0;j30000;j+);(3)实验2程序#include io430.hvoid delay();int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; unsigned char Light18 = 0x10,0x80,0x0

10、1,0x08,0x04,0x02,0x40,0x20; unsigned char Light24 = 0x28,0x14,0x41,0x82; unsigned char i; P2SEL = 0x00; P2DIR = 0xff; while(1) for(i=0;i=7;i+) P2OUT = Light1i; delay(); ; for(i=0;i=3;i+) P2OUT = Light2i; delay(); ; ; return 0;void delay() long int j; for(j=0;j300000;j+);(4)实验3程序#include io430.hvoid

11、buzz();void delay();int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; unsigned char Light18 = 0x10,0x80,0x01,0x08,0x04,0x02,0x40,0x20; unsigned char Light24 = 0x28,0x14,0x41,0x82; unsigned char i, flag=0, key=0; P1DIR |= BIT7; P1SEL = 0x00; P1SEL2 = 0x00; P1R

12、EN |= BIT1+BIT4; P1OUT = 0xff; P2SEL = 0x00; P2SEL2 = 0x00; P2DIR = 0xff; P2OUT = 0xff; while(1) if(P1IN&BIT4)=0) key = 1; buzz(); else if(P1IN&BIT1)=0) key = 2; buzz(); if(key=1) while(1) for(i=0;i=7;i+) P2OUT = Light1i; delay(); if(P1IN&BIT1)=0) key=2; flag=1; break; ; if(flag=1) flag=0; buzz(); b

13、reak; ; if(key=2) buzz(); while(1) for(i=0;i=3;i+) P2OUT = Light2i; delay(); if(P1IN&BIT4)=0) key=1; flag=1; break; ; if(flag=1) flag=0; buzz(); break; ; P2OUT = 0xff; ; return 0;void delay() long int j; for(j=0;j30000;j+);void buzz() P1OUT &= BIT7; delay(); P1OUT |= 0xff;(5)实验4(1)程序#include io430.h

14、unsigned char i, flag=0, key=0;unsigned int j;void buzz();void delay();int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; unsigned char FFW4 = 0x01,0x02,0x04,0x08; unsigned char FFZ4 = 0x01,0x08,0x04,0x02; P2SEL = 0x00; P2SEL2 = 0x00; P2DIR = 0xff; P2OUT = 0x0

15、0; while(1) for(j=0;j=256;j+) for(i=0;i=3;i+) P2OUT = FFWi; delay(); ; ; for(j=0;j=256;j+) for(i=0;i=3;i+) P2OUT = FFZi; delay(); ; ; ; return 0;void delay() long int j; for(j=0;j0x1f0;j+);(6)实验4(2)程序#include io430.hunsigned char i, flag=0, key=0;void buzz();void delay();int main( void ) / Stop watc

16、hdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; unsigned char FFW4 = 0x01,0x02,0x04,0x08; unsigned char FFZ4 = 0x01,0x08,0x04,0x02; P1DIR = BIT7; P1SEL = 0x00; P1SEL2 = 0x00; P1REN |= BIT0+BIT2+BIT5; P1OUT = 0xff; P2SEL = 0x00; P2SEL2 = 0x00; P2DIR = 0xff; P2OUT = 0x00; while(1) if(P1

17、IN&BIT2)=0) key = 1; buzz(); else if(P1IN&BIT5)=0) key = 2; buzz(); if(key=1) while(1) if(key=0) P2OUT = 0x00; ; return 0;void delay() long int j; for(j=0;j0xfff;j+);void buzz() P1OUT &= BIT7; delay(); P1OUT |= BIT7;(7)实验5程序#include io430.hunsigned char i, flag=0, key=0;unsigned int j;void buzz();vo

18、id delay();int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; unsigned char FFW8 = 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09; unsigned char FFZ8 = 0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03; P2SEL = 0x00; P2SEL2 = 0x00; P2DIR = 0xff; P2OUT = 0x00; while(1) for(j=0;j=256;j+) for(i=0;i=7;i+) P2OUT = FFWi; delay(); ; ; for(j=0;j=256;j+) for(i=0;i=7;i+) P2OUT = FFZi; delay(); ; ; ; return 0;void delay() long int j; for(j=0;j0x1f0;j+);

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

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