单片机实验指导书

2020-06-07 15:39

实验一 I/O口使用练习

1.复位

/*---------------------------------------------------------*/ /************************************************************ 实验内容:MCU复位 2011-11-06

实验现象:运行后,PB口指示灯连续闪烁五次后灭,按复位键后,再闪烁五次。 ************************************************************/ /*---------------------------------------------------------*/ #include /* common defines and macros */ #include %unsigned char k; //用于计数

/*************************************************************/ /* 延时函数 */ /*************************************************************/ void delay(void) {

unsigned int i,j; for(i=0;i<5;i++) for(j=0;j<50000;j++); }

/*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) { DisableInterrupts;

DDRB =0xff; //PB口输出

PORTB =0x0f; //你可以改变PB口数据,显示不同形式的闪烁,如,0x0F,0xAA,0x55等

EnableInterrupts;

for(k=0;k<5;k++) //5次闪烁 { delay(); PORTB=~PORTB; delay(); PORTB=~PORTB;

}

for(;;); //死循环。

//将来应用时,以上可作为你设备的自检程序, }

2.流水灯

/*---------------------------------------------------------*/ /************************************************************ 实验内容:并口输出,移位使用 2011-11-06

实验说明:最小系统板上有8个发光二级管,每个二极管串联了一个限流电阻,用单片机的PB口控制二极管的亮灭状态,PB口的管脚置1时,二极管熄灭,置0时,二极管点亮。

实验现象:板上的D1、D2、D3、D4、D5、D6、D7、D8中有一个点亮,并且循环移动。 ************************************************************/ /*---------------------------------------------------------*/ #include /* common defines and macros */

#include %unsigned char data=0x01;

/*************************************************************/ /* 延时函数 */ /*************************************************************/ void delay(void) {

unsigned int i,j; for(j=0;j<2;j++) for(i=0;i<60000;i++) ; }

/*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) {

DisableInterrupts;

DDRB=0xff; //设置为输出

PORTB=~data; //点亮LED1。如果不取反,有什么现象? for(;;) {

delay();

data=data<<1; //左移一位,补零 if(data==0) data=0x01;

EnableInterrupts;

PORTB=data; } }

实验二 中断实用练习

1. IRQ中断控制流水灯

/************************************************************ 实验内容:IRQ中断控制流水灯 2011-11-06

实验说明:用单片机的PB口控制二极管的亮灭状态,管脚置1灭,置0亮。 实验接线:IRQ-A或者IRQ-B连接目标板上的\区域的IRQ引脚上。 实验现象:如果连接的是IRQ-A,则按键松开灯移动一位;

如果连接的是IRQ-B,则按键按下灯移动一位。(用下降沿触发中断) 如果使用用XIRQ,将汇编那句注释去掉,中断处理号改为5 ************************************************************/ #include /* common defines and macros */

#include %unsigned char data=0x01;

/*************************************************************/ /* 延时函数 */ /*************************************************************/ void delay(void) {

unsigned int i,j; for(j=0;j<10;j++) for(i=0;i<60000;i++) ; }

/******************PE1口中断设置****************************/ void IRQ_Init(void) { //IRQ中断允许寄存器IRQCR IRQCR_IRQE=1; //下降沿触发

//IRQCR_IRQEN=1; //中断使能。复位默认为1,可将此句去掉 }

/*************************************************************/ /* 主函数 */

/*************************************************************/ void main(void) {

DisableInterrupts; //中断禁止

DDRB=0xff; //设置为输出 PORTB=~data; //点亮LED1

asm ANDCC #$eF //XIRQ中断允许,是低电平触发,无寄存器设置 IRQ_Init();

EnableInterrupts; //中断允许 for(;;); //死循环,等中断 }

/***********************中断处理***************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKED //中断

void interrupt 6 IRQ_interrupt(void) // IRQ中断号规定为6,见MC9S12XS128.h文件

{ //XIRQ中断号规定为5,见MC9S12XS128.h文件 data=data<<1; //左移一位 if(data==0) data=0x01; PORTB= ~data; delay(); }

#pragma CODE_SEG DEFAULT

2.流水灯及IRQ中断+数码管显示

/************************************************************ 实验内容:流水灯及IRQ中断+数码管显示 2011-11-06

实验说明:用单片机的PB口控制二极管的亮灭,置1灭,置0亮。 实验接线:1.IRQ-A或IRQ-B连接IRQ上,用于中断。

2.四位数码管的段选连接到PORTP,片选连接到PORTT,上下对应接上,

原理见书259页,

数码管的引脚: 12 11 10 9 8 板上的I/O引脚:T3 P0

7 6 5 4 3 2 1

P5 T2 T1 P1 T0 P6 P2 P7 P3 P4

实验现象:上电LED全灭,数码管显示\

当按下IRQ键时,数码管显示\,同时LED灯循环点亮;再按,则上述

现象交替出现。

************************************************************/

/*---------------------------------------------------------*/ #include /* common defines and macros */

#include %unsigned char flag; unsigned char data=0x01;

//***********************常量定义*********************

const unsigned char DisplayDecode[]={~0x3f,~0x37,~0x71,0xff}; // 0 , n , F , 灭 const unsigned char WeiMa[]={0xf7,0xfb,0xfd,0xfe}; void LED_yiwei(void);

//************函数声明************************ void display(unsigned char wei,int data); void delay_ms(int m);

void dis(int time ,int a, int b, int c,int d) ; /**************************************************/ /*-----------------ms 级延时---------------------*/ /*************************************************/ void delay_ms(int m) {int i,j;

for(j=0;j

/******************PE1的IRQ中断设置****************************/ void IRQ_Init(void) {

IRQCR_IRQE=1; //下降沿触发 IRQCR_IRQEN=1; //IRQ中断允许 }

/*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) { flag=0; data=0x01;

DisableInterrupts;


单片机实验指导书.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:非遗与老字号的渊源

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: