当前位置:文档之家› MSP430与DS18B20数码管显示中断法

MSP430与DS18B20数码管显示中断法

MSP430与DS18B20数码管显示中断法
MSP430与DS18B20数码管显示中断法

MSP430与DS18B20数码管显示(中断法)

#include ;

typedef unsigned char uchar;

typedef unsigned int uint;

/*****18B20部分的接口定义********/

#define DQ1 P1OUT |= BIT6

#define DQ0 P1OUT &= ~BIT6

#define DQ_in

P1DIR &= ~BIT6

#define DQ_out P1DIR |= BIT6

#define DQ_val (P1IN & BIT6)

/*****数码管部分的接口定义********/

#define wei_h P5OUT|= BIT5

#define wei_l P5OUT&= ~BIT5

#define duan_l

P6OUT &= ~BIT6

#define duan_h P6OUT |= BIT6

//数码管七段码;0--f

uchar table[16] =

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar table1[16] =

{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};//有点

uchar tflag,num=0 ;

int tvalue;

uchar disdata[4];

/***********18B20部分程序******************/

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

函数名称:DelayNus

能:实现N个微秒的延时

数:n--延时长度

返回值:无

说明

:定时器A的计数时钟是1MHz,CPU主频8MHz

所以通过定时器延时能够得到极为精确的

us级延时

********************************************/ void DelayNus(uint n)

{

CCR0 = n;

TACTL |= MC_1;

//增计数到CCR0

while(!(TACTL & BIT0));

//等待

TACTL &= ~MC_1;

//停止计数

TACTL &= ~BIT0;

//清除中断标志

}

/******************************************* 函数名称:Init_18B20

能:对DS18B20进行复位操作

数:无

返回值:初始化状态标志:1--失败,0--成功

********************************************/ uchar Init_18B20(void)

{

uchar Error;

DQ_out;

_DINT();

DQ0;

DelayNus(500); DQ1;

DelayNus(55); DQ_in;

_NOP();

if(DQ_val)

{

Error = 1;

//初始化失败

}

else

{

Error = 0;

//初始化成功

}

DQ_out;

DQ1;

_EINT();

DelayNus(400);

return Error;//此处如果 Error = 1,后面就会出现死循环,表示18B20可能坏了

}

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

函数名称:Write_18B20

能:向DS18B20写入一个字节的数据

数:wdata--写入的数据

返回值:无

********************************************/ void Write_18B20(uchar wdata)

{

uchar i;

_DINT();

for(i = 0; i ;>;= 1;

DelayNus(50);

//延时50us

DQ1;

DelayNus(10);

//延时10us

}

_EINT();

}

/******************************************* 函数名称:Read_18B20

能:从DS18B20读取一个字节的数据

数:无

返回值:读出的一个字节数据

********************************************/ uchar Read_18B20(void)

{

uchar i;

uchar temp = 0;

_DINT();

for(i = 0;i ;>;= 1; DQ0;

DelayNus(6);

//延时6us

DQ1;

DelayNus(8);

//延时9us

DQ_in;

_NOP();

if(DQ_val)

temp |= 0x80;

DelayNus(45); //延时45us

DQ_out;

DQ1;

DelayNus(10); //延时10us

}

_EINT();

return temp;

}

uint Do1Convert(void) {

uchar i;

uchar temp_low; uint temp;

do

{

i = Init_18B20();

}

while(i);

//此处的i就是等于前面的Error,Error = 1,就会出现死循环,表示18B20可能坏了

Write_18B20(0xcc);//送跳过读取产品ID号命令

Write_18B20(0x44);//发送温度转换命令

for(i = 20;i >; 0;i--)

DelayNus(60000); //延时800ms以上

do

{

i = Init_18B20();

}

while(i);

//此处的i就是等于前面的Error,Error = 1,就会出现死循环,表示18B20可能坏了

Write_18B20(0xcc);//送跳过读取产品ID号命令 Write_18B20(0xbe);//发送读ROM命令

temp_low = Read_18B20();

//读低位

temp = Read_18B20();

//读高位

temp = (temp; 0; i--);

//等待8MHz晶体起振

}

while ((IFG1 & OFIFG));

//晶振失效标志仍然存在?

BCSCTL2 |= SELM_2 + SELS;

//MCLK和SMCLK选择高频晶振

/*P6DIR |= BIT6;P6OUT |= BIT6;

//关闭电平转换

P5DIR |= BIT5;P5OUT |= BIT5;

//关闭电平转换

P6DIR |= BIT7;P6OUT |= BIT7; //关闭蜂鸣器*/ // 设置看门狗定时器,初始化控制数码管的IO WDTCTL = WDT_ADLY_1_9;

IE1 |= WDTIE;

//计数时钟选择SMLK=8MHz,1/8分频后为1MHz TACTL |= TASSEL_2 + ID_3;

//打开全局中断

_EINT();

//循环读数显示

while(1)

{

display(Do1Convert());

}

}

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

函数名称:watchdog_timer

能:看门狗定时器中断服务函数,进行数码

管动态扫描

数:无

返回值:无

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

#pragma vector = WDT_VECTOR

__interrupt void watchdog_timer(void)

{

P4OUT = table[disdata[num]];

if(num==2) P4OUT = table1[disdata[num]]; //加上小数点

duan_h;

duan_l;

P4OUT = ~(1<

wei_h;

wei_l;

num++;

if(num == 4) num = 0;

}

数码管显示程序注释

/***************************************************** (本程序基于本人单片机实际电路开发,只需改动个别地方,即可实现) 数码管显示其实就是利用视觉停留来显示 实际上它是一个接着一个亮,但人以为是一起亮的 当然它也可以全部一起亮(不同数字)但物理连接麻烦得多,成本高,所以一般不采用(个人理解) ***************************************************/ #include #define unint unsigned int #define unchar unsigned char /***************************************************** 位声明 ***************************************************/ sbit guan1=P2^4; //位选:第1个数码管io sbit guan2=P2^5; //位选:第2个数码管io sbit guan3=P2^6; //位选:第3个数码管io sbit guan4=P2^7; //位选:第4个数码管io unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管编码 /***************************************************** 函数功能:延时 ***************************************************/ void delay(unsigned int i) { unsigned char j; for(;i>0;i--) for(j=110;j>0;j--); } void display(unint num)//带参数显示函数 { unchar ge,shi,bai,qian,sh,fe; //存储个,十,百,千位的空间 sh=num/100; //将num数的前两位分离并存储在sh fe=num%100;//将num数的后两位分离并存储在fe guan1=0;//P2=0Xbf;//11101111 第一个数码管亮位选开 qian=sh/10; //分离千位 P0=table[qian];//段选 delay(60); //延时 guan1=1; //位选关 guan2=0;//P2=0X7f;//11011111 bai=sh%10; //分离百位 P0=table[bai]; //段选

MSP430 定时器TB中断应用实例

MSP430 定时器TB中断应用实例 msp430定时器中断,实现功能:利用定时器TB0的中断实现板上led灯得闪烁。 TA和TB的设置相似,需要设置的寄存器有: 1、TBR:定时计数器主体,对定时计数器进行初始值设置。 2、TBCTL:控制寄存器,对定时器的各个属性进行设置,各位如图所示,(图中是TA的控制寄存器,把A改成B就是了) TBSSELx是选择定时器时钟输入源,一般设置为2取系统时钟。 IDx是对输入时钟进行分频,0不分频,1为2分频,2为4分频,3为8分频 MCx为计数模式控制位,0为停止模式,1为增基数模式,2为连续计数模式,3为增/减计数模式 3、TBCCR0寄存器用于设置比较值,例如增加计数模式时,当TBR中的值增加到TBCCR0中的值时,产生中断。 程序代码: #include "msp430.h" #define led P1OUT

int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1DIR = 0x01; TBR = 0;//设置计数器初值 TBCTL |= TBSSEL_2|0xc0|MC_1;//对寄存器TBCTL进行设置,TBSSEL_2为选择MCLK系统时钟,0xc0为8分频,MC_1为增计数模式 TBCCR0 = 0xfffd;//设置比较值,当TBR中的值增加到TBCCR0时,产生中断。TBCCTL0 &= ~CAP;//设置为比较模式 while(1) { led = 0x01; do{;} while(!(TBCCTL0 & CCIFG));//没有中断标志时进行空操作 TBCCTL0 &= 0xfffe;//对中断标志进行软件清零 led = 0x00; do{;} while(!(TBCCTL0 & CCIFG)); TBCCTL0 &= 0xfffe; } //return 0; }

6位7段LED数码管显示

目录 1. 设计目的与要求..................................................... - 1 - 1.1 设计目的...................................................... - 1 - 1.2 设计环境...................................................... - 1 - 1.3 设计要求...................................................... - 1 - 2. 设计的方案与基本原理............................................... - 2 - 2.1 6 位 8 段数码管工作原理....................................... - 2 - 2.2 实验箱上 SPCE061A控制 6 位 8 段数码管的显示................... - 3 - 2.3 动态显示原理.................................................. - 4 - 2.4 unSP IDE2.0.0 简介............................................ - 6 - 2.5 系统硬件连接.................................................. - 7 - 3. 程序设计........................................................... - 8 - 3.1主程序......................................................... - 8 - 3.2 中断服务程序.................................................. - 9 - 4.调试............................................................... - 12 - 4.1 实验步骤..................................................... - 12 - 4.2 调试结果..................................................... - 12 - 5.总结............................................................... - 14 - 6.参考资料........................................................... - 15 - 附录设计程序汇总.................................................... - 16 -

指示灯数码管的中断控制

学生实验报告 学院:软件与通信工程学院 课程名称:单片机系统设计 专业班级: 姓名: 学号:

学生实验报告(1) 一、实验综述 1、实验目的及要求 【实验目的】 掌握外部中断原理,学习中断编程与程序调试方法 【内容及要求】 (1)熟悉uvision3的软件调试方法; (2)完成c51语言编程 (3)练习uvision3与ISIS的联机仿真方法 【实验原理】 在编程软件配合下,要求实现如下功能:程序启动后,D1处于熄灯、LED1处于黑屏状态;单击K1,可使D1亮灯状态反转一次;单击K2,可使LED1显示值加1,并按十六进制数显示,达到F后重新从1开始。 软件编程原理为:K1和K2的按键动作分别作为INT0和INT1的中断请求,在中断函数中进行指示灯与数码管的信息处理。初始化后,主函数处于无限循环状态,等待中断请求 2、实验仪器、设备或软件 电脑, Keil uVision4, proteus7 二、实验过程(实验步骤、记录、数据、分析)

(1)在Keil uVision4中编写和编译C51程序,生成可执行文件; (2)在uVision4中启动ISIS的仿真运行,并进行联机调试。 【实验代码】 #include<> unsigned char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x58,0x5e,0x79,0x71}; unsigned char count=0; sbit P0_4=P0^4; void INT_0SRV() interrupt 0 { P0_4 = ~P0_4; } void INT_1SRV() interrupt 2 { count++; if(count==16) count = 1; P2 = led_mod[count]; } void main(){ P2=0x00; P0_4=0x01; EA=1; EX0=1; EX1=1; IT1=1; IT0=1;

MSP430 中断服务

当系统时钟发生器基本功能建立之后,CPU内状态寄存器SR的SCG1,SCG0,CPUOFF,OSCOFF位是重要的低功耗控制位。只要任意中断被响应,上述控制位就被压入堆栈保存,中断处理之后,又可恢复先前的工作方式。在中断处理子程序执行期间,通过间接访问堆栈数据,可以操作这些控制位;这样允许程序在中断返回(RETI) 后,以另一种功耗方式继续运行。 各控制位的作用如下: SCG1:复位,使能SMCLK;置位,禁止SMCLK。 SCG0:复位,激活直流发生器,只有SCG0置位,并且DCOCLK没有被用作MCLK或SMCLK时,直流发生器才能被禁止。 OSCOFF:复位,激活LFXT1,只有当OSCOFF被置位并且LFXT1CLK不用于MCLK或SMCLK时,FLXT1才能被禁止;当使用晶体振荡器关闭选项OSCOFF时,需要考虑晶体振荡器的启动设置时间 CPUOFF:复位,激活MCLK;置位,关闭MCLK。 控制位SCG1、SCG0、CPUOFF、OSCOFF可由软件配制成六种不同的工作模式:工作模式控制位 CPU状态、振荡器及时钟 SCG1=0 CPU活动 SCG0=0 MCLK活动 AM CPUOFF=0 SMCLK活动 OSCOFF=0 ACLK活动 SCG1=0 CPU禁止 LPM0 SCG0=0 MCLK禁止 OSCOFF=0 SMCLK活动 CPUOFF=1 ACLK活动 SCG1=0 CPU禁止 MCLK禁止 LPM1 SCG0=1 如果DCOCLK位用作MCLK或SMCLK,则直流发生器禁止, 否则,仍然活动 OSCOFF=0 SMCLK活动 CPUOFF=1 ACLK活动 SCG1=1 CPU禁止 如果DCO未被用作MCLK或SMCLK,自动禁止 SCG0=0 MCLK禁止

数码管显示程序(汇编语言)

实验三数码显示 一、实验目的 了解LED数码管动态显示的工作原理及编程方法。 二、实验内容 编制程序,使数码管显示“DJ--88”字样。 三、实验程序框图 四、实验步骤 联机模式: (1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM

文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。 (2)数码管显示“DJ--88”字样。 脱机模式: 1、在P.态下,按SCAL键,输入2DF0,按EXEC键。 2、数码管显示“DJ--88”字样。 五、实验程序清单 CODE SEGMENT ;S6.ASM display "DJ--88" ASSUME CS:CODE ORG 2DF0H START: JMP START0 PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1 CON1: CALL DISP JMP CON1 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB

数码管显示程序

数码管显示程序 一、程序X1 1、程序X1的功能:最右边的数码管显示“0” 2、程序: ORG 0 LJMP STR ORG 0100H STR: MOV P3, #0FEH ;送最低位有效的位码 MOV P0, #0C0H ;送“0”的段码“0C0H” SJMP STR END 二、程序X2: 用查表方式显示某个显示缓冲器中的数字 1、查表显示的预备知识 设从右到左各显示器对应的显示缓冲器为片内RAM79H~7EH

3、 实例: 例:已知(79H )= 0 7H , 查段码表在最右边的数码管显示79H 中的 “7”; 注:共阳极的段码表: TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH 若:(A )= 0XH 则数字“X ”对应的段码在段码表中的表地址 = TAB + X ORG 0 LJMP STR ORG 0100H ① 各显示器与显示缓冲器地址对应关系 显示缓冲器: 7EH 7DH 7CH 7BH 7AH 79H 对应显示 器: ② 显示缓冲器的值与显示数字的关系: 显示缓冲器中的值 对应段码表地址 显示的数字 0XH 表首址+OXH X

STR: MOV P3, #11111110B ;送最低位有效的位码 MOV 79H , #07H ;送要显示的数据到显示缓冲器 MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTR MOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0) SJMP STR TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH END 例2:. 查段码表在最右边的数码管循环显示“0”~“F” ORG 0 LJMP STR ORG 0100H STR: MOV P3, #11111110B ;送最低位有效的位码 LP0: MOV 79H , #0H ;送要显示的数据的初值到显示缓冲器MOV R3 , #6 ; 送要显示的数据的个数 LP: MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTR MOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0)

单片机指示灯和数码管的中断控制实验报告

实验四、指示灯和数码管的中断控制 一、实验目的 掌握外部中断的工作原理,学会中断程序设计。 二、实验内容 1、按照教材图A.53,绘制实验四电路原理图; 2、要求采用外部中断原理完成本次实验,其中按键K1、K2均设置为下降沿触发方式,自然优先级; 3、编写C51程序实现如下功能:开机后D1灭灯,LED1黑屏,随后单击K1→D1状态反转,单击K2 →LED1从0开始循环显示0~F字符。 4、观察仿真结果,完成实验报告。 三、实验要求 提交的实验报告中应包括:电路原理图,外部中断工作原理阐述(以K1为例说明中断响应过程),C51源程序(含流程图与注释语句),运行效果(含运行截图与说明),实验小结。 提交实验报告的电子邮件主题及存盘文件名格式如,2005041220马晓明实验四。 1、电路原理图 2、外部中断工作原理阐述

持续按下K1则D1将“亮→灭→亮→灭→亮→灭如此循环,表明实现了K1对应于D1状态反转这个功能;持续按下持续按K2则数码显示管依次显示1-F,实现了K2对应于0~F间的数码管加一计数显示。 3、C51程序 #include sbit P0_4=P0^4; unsigned char count=0; unsigned led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0 x5e,0x79,0x71}; void main(){ P2=0x00; P0_4=0; EA=1; EX1=EX0=1; IT1=IT0=1; while(1); } void INT_OSVR() interrupt 0 {P0_4=!P0_4;} void INT_1SVR() interrupt 2

单片机指示灯和数码管的中断控制实验报告

实验四、指示灯与数码管的中断控制 一、实验目的 掌握外部中断的工作原理,学会中断程序设计。 二、实验内容 1、按照教材图A、53,绘制实验四电路原理图; 2、要求采用外部中断原理完成本次实验,其中按键K1、K2均设置为下降沿触发方式,自然优先级; 3、编写C51程序实现如下功能:开机后D1灭灯,LED1黑屏,随后单击K1→D1状态反转,单击K2 →LED1从0开始循环显示0~F字符。 4、观察仿真结果,完成实验报告。 三、实验要求 提交的实验报告中应包括:电路原理图,外部中断工作原理阐述(以K1为例说明中断响应过程),C51源程序(含流程图与注释语句),运行效果(含运行截图与说明),实验小结。 提交实验报告的电子邮件主题及存盘文件名格式如,2005041220马晓明实验四。 1、电路原理图 2、外部中断工作原理阐述

持续按下K1则D1将“亮→灭→亮→灭→亮→灭如此循环,表明实现了K1对应于D1状态反转这个功能;持续按下持续按K2则数码显示管依次显示1-F,实现了K2对应于0~F间的数码管加一计数显示。 3、C51程序 #include sbit P0_4=P0^4; unsigned char count=0; unsigned led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0 x5e,0x79,0x71}; void main(){ P2=0x00; P0_4=0; EA=1; EX1=EX0=1; IT1=IT0=1; while(1); } void INT_OSVR() interrupt 0 {P0_4=!P0_4;} void INT_1SVR() interrupt 2

430中断总结

MSP430的中断分为3种: 1.系统复位、 2.非屏蔽中断、 3.可屏蔽中断。 系统复位指向中断向量表(表3-11)的最高地址0xFFFE。 非屏蔽中断和可屏蔽中断根据能否被SR寄存器中的全局中断使能位GIE禁用来区分,非屏蔽中断不受GIE的控制,具备独立的中断使能; 可屏蔽中断除了受本身的中断使能控制,还接受GIE控制。 1. 在MSP430中 @非屏蔽中断主要有3个,分别是来自MSP430 外部管脚NMI的触发 FLASH非法访问 振荡器错误 非屏蔽中断都指向中断向量表中的0xFFFC地址。 2. MSP430具备大量的@可屏蔽中断,定时器、ADC、DMA、UART、WDT、I/O、比较器等都具备中断功能。不同的可屏蔽中断优先级可根据中断向量表决定。可屏蔽中断的中断向量表从0xFFFA地址开始向低地址扩展,地址越高的中断向量表所对应的中断优先级越高。 3. 每个中断向量在中断向量表里面占据一个2Byte空间的表项,这个2Byte的空间用来存储对应中断服务函数的首地址,CPU根据中断向量表里的地址跳转到中断服务函数。仔细观察中断向量表可以看到,一些中断向量对应于多个中断源。例如,地址为0xFFF8的Timer1_A3中断,当TA1CCR1中断标志位CCIFG置位或者TAIFG置位都会跳转到该向量。又如具备中断功能的P1和P2端口,端口中的任意一个管脚发生中断都会跳转到对应的中断向量。这种中断就叫做多源中断。对于多源中断,中断源中任意一个中断发生都会跳转到公用的中断向量表项,这个时候需要通过中断标志位区别具体的中断源。有了这些中断向量表的基础知识,下面介绍中断的处理过程,包括中断的接收和退出过程。 4. 微控制器使用过程中一些突发的程序跑飞问题,很多时候都是由于没有正确地处理中断造成的。 5. 中断发生的先决条件是对应中断使能位使能, @非屏蔽中断要求其独立的中断使能开启; @可屏蔽中断要求全局中断使能和自身中断使能同时开启。

第5章 中断系统 - 3

【实例4】【P108】根据下图所示的数码管显示与按键电路,编程验证两级外部中断嵌套效果。此外,利用发光管验证外部中断请求标志IE0在脉冲触发中断时的硬件置位与撤销过程。 #include //林立P108例题 char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(unsigned int count) { unsigned char i; while(count--) for(i=0;i<120;i++); } void key0(void) interrupt 0 // P3.2 { unsigned char i; for(i=0; i<=9; i++) { P2=led_mod[i]; delay(1000); } P2=0x40; //循环显示完“0”~“9”之后,显示“-”

void key1(void) interrupt 2 //P3.3 { unsigned char i; for(i=0; i<=9; i++) { P1=led_mod[i]; delay(1000); } P1=0x40; } void main(void) { unsigned char i; TCON=0x05; // 0x05= 0000 0101,最好写成IT0=1,IT1=1 PX0=0; PX1=1; //INT1 高优先级 P1=0x40; P2=0x40; IE=0x85; // 0x85=1000 0101, EA=1, EX1=1,EX0=1 while(1) { for(i=0;i<=9;i++) { P0=led_mod[i]; delay(1000); } } } 5.6 扩充外部中断源 实际应用中,两个外部中断请求源往往不够用,需对外部中断源进行扩充,如图5-10所示。系统有5个外部中断请求源IR0~IR4,高电平有效。 INT,优先级高的请求源IR0直接接到80C51的一个外部中断请求输入端0 其余4个请求源IR1~IR4通过各自的OC门(集电极开路门)连到80C51的另 INT,同时还连到P1口的P1.0~P1.3脚,供80C51查询。一个外中断源输入端1 图5-10所示电路,除了IR0优先权级别最高外,其余4个外部中断源的中断优先权的高与低取决于查询顺序。

实验五 定时中断及数码管显示实验(3课时)20140506

实验五定时中断及数码管显示实验(3课时) 1.对P1口所接8只发光二极管,编写相应的程序使发光二极管循环点亮。其中每一个发光二极管亮的时间为0.5S,0.5S的时间要求用定时中断实现。(已知单片机晶振频率为12 .00MHz) 2.采用定时器设计一分钟倒计时器,通过P1口显示计时状态,每过1S时间8个发光二极管最右边一个亮一次,一分钟时间到时全部8个二极管都亮。(已知单片机晶振频率为12 .00MHz) 3. 用八段数码管显示自己的生日:年月日各两位。 实验报告 实验五 1. 实验目的和要求 ①对P1口所接8只发光二极管,编写相应的程序使发光二极管循环点亮。其中每一个发光二极管亮的时间为0.5S,0.5S的时间要求用定时中断实现。(已知单片机晶振频率为 12 .00MHz) ②采用定时器设计一分钟倒计时器,通过P1口显示计时状态,每过1S时间8个发光二极管最右边一个亮一次,一分钟时间到时全部8个二极管都亮。(已知单片机晶振频率为 12 .00MHz) ③用八段数码管显示自己的生日:年月日各两位。 2. 主要仪器设备 ①笔记本电脑 ②51单片机 3. 实验内容 ①对P1口所接8只发光二极管,编写相应的程序使发光二极管循环点亮。其中每一个发光二极管亮的时间为0.5S,0.5S的时间要求用定时中断实现。(已知单片机晶振频率为12 .00MHz) 源程序: #include #define uint unsigned int #define uchar unsigned char char i=100; uchar temp; void display()

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序 基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。 最佳答案 下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你! #include unsigned char code Dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码 unsigned char k; //设置全局变量k 为键盘的键值 /************************************键盘延时函数****************************/ void key_delay(void) //延时函数 { int t; for(t=0;t<500;t++); } /************************************键盘扫描函数******************************/ void keyscan(void) //键盘扫描函数 { unsigned char a; P2 = 0xf0; //键盘初始化 if(P2!=0xf0) //有键按下? { key_delay(); //延时 if(P2!=0xf0) //确认真的有键按下? { P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平 key_delay(); a = P2; //a作为缓存 switch (a) //开始执行行列扫描 { case 0xee:k=15;break; case 0xde:k=11;break; case 0xbe:k=7;break; case 0x7e:k=3;break; default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平 a = P2; switch (a)

MSP430简介(超详细·)

msp430简介 MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化, MSP430系列将会得到越来越多人的喜爱. 一、IO口 (一)、P口端口寄存器: 1、PxDIR 输入/输出方向寄存器 (0:输入模式 1:输出模式) 2、PxIN 输入寄存器 输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道I/O口的输入信号。 3、PxOUT 输出寄存器 寄存器内的内容不会受引脚方向改变的影响。 4、PxIFG 中断标志寄存器 (0:没有中断请求 1:有中断请求) 该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;这8个 中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位;外部 中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受; 5、PxIES 中断触发沿选择寄存器 (0:上升沿中断 1:下降沿中断) 6、PxSEL 功能选择寄存器 (0:选择引脚为I/O端口 1:选择引脚为外围模块功能) 7、PxREN 上拉/下拉电阻使能寄存器 (0:禁止 1:使能) (二)、常用特殊P口: 1、P1和P2口可作为外部中断口。 2、P6可作为A/D输入口。 3、P1.2和P2.0可作为PWM波输出口。 4、P1.1:MCLK P1.5:ACLK 5、串口通信时:P2.4、 P4.0为发送TXD, P2.5 、P4.1为接收RXD。 (三)、基本操作: 1、所有P口都可作为通用IO口使用 2、所有P口都可进行字节操作和位操作 按字节操作:

四位数码管的显示程序

大家可以参考下: 我也没调试过大家有问题可以给我留言我的邮箱zhangyi061322@https://www.doczj.com/doc/5f18421128.html, 基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。 最佳答案 下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你! #include unsigned char code Dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码 unsigned char k; //设置全局变量k 为键盘的键值 /************************************键盘延时函数****************************/ void key_delay(void) //延时函数 { int t; for(t=0;t<500;t++); } /************************************键盘扫描函数******************************/ void keyscan(void) //键盘扫描函数 { unsigned char a; P2 = 0xf0; //键盘初始化 if(P2!=0xf0) //有键按下? { key_delay(); //延时 if(P2!=0xf0) //确认真的有键按下? { P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平 key_delay(); a = P2; //a作为缓存 switch (a) //开始执行行列扫描 { case 0xee:k=15;break; case 0xde:k=11;break; case 0xbe:k=7;break; case 0x7e:k=3;break; default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平

指示灯开关的中断控制单片机实验报告

嘉应学院物理与光信息科技学院单片机原理及应用实验 学生实验报告 实验项目:指示灯/数码管的中断控制 实验地点:工A310 班级: 姓名: 座号: 指导老师:老师 实验时间:年月日

一、实验目的 掌握外部中断原理,学习中断编程与程序调试方法。 二、实验原理 实验原理图如图所示: 图中按键K1和K2分别接于P3.2和P3.3,发光二极管D1接于P0.4,共阴极数码管LED1接于P2口。时钟电路、复位电路、片选电路忽略。 在编程软件的配合下,要求实现如下功能:程序启动后,D1处于熄灯、LED1处于黑屏状态;单击K1,可使D1亮灯状态反转一次;单击K2,可使LED1显示值加1,并按十六进制数显示,达到F后重新从1开始。 编程原理为:K1和K2的按键动作分别作为INT0和INT1的中断请求,在中断函数中进行指示灯与数码管的信息处理。初始化后,主函数处于无限循环状态,等待中断请求。三、实验内容: (1)熟悉μVision3的软件调试方法; (2)完成实验4的C51语言编程; (3)掌握在μVision3与ISIS的联机仿真方法。 四、实验步骤 1、提前阅读与实验4相关的阅读材料; 2、参考书本实验4,在ISIS中完成电路原理图的绘制: (1).启动ISIS模块 从Windows的“开始”菜单中启动Proteus ISIS模块,可进入仿真件的主界面,如图所示

可以看出,ISIS的编辑界面是标准的Windows软件风格,由标准工具栏、主菜单栏、绘图工具栏、仿真控制工具栏、对象选择窗口、原理图编辑窗口和预览窗口等组成。 (2).元件和电源的选取、摆放及属性编辑,总线与标签的画法等内容 元件的选取:单击左侧绘图工具栏中的“元件模式”按観和对象选择按観“P”,弹出“Pick Devices”元件选择窗口,如图: 摆放元件: 单击对象选择列表中的元件名称,预览窗口中出现的图形单击编辑窗口,元件以红色轮廓图形出现(选中状态),拖动鼠标使元件轮廓移动到所需位置,再次单击可固定摆放位置,同时也撤销选中状态(变为黑色线条图形)。 编辑属性与总线: 对摆放好的元件双击或者右键后选择“编辑属性”即可对元件的属性进行修改。 最后效果图为:

单片机第五章答案

5-3. 现有存储容量为512K×4、1K×4、2K×8、4K×1、8KB、512KB和4MB的存储器,试问这些存储器分别有多少条地址线和数据线(设它们均为非动态RAM)? 5-8 要在单片机片外扩展16KB数据存储器,选择其地址为0000~3FFFH。如选用6264 为存储器芯片,74LS138为译码器,试画出硬件的连接图。(图中右边的6116应该改为6264) 74LS138 5-9 要在单片机片外扩展32KB数据存储器,选择其地址为8000H~FFFFH。如选用线 选法,试设计其硬件的连接图。

5-10写出图5-43中#1~#7存储器的寻址范围,片选信号低电平有效,其中#1~#3为2KB 的ROM;#4~#7为1KB的RAM. 1#:8000H----87FFH 2#:8800H----8FFFH 3#:9000H----97FFH 4#:0A000H—0A3FFH 5#:0A400H---0A7FFH 6#:0A800H---0ABFFH 7#:0AC00H---0AFFFH 5-11 决定8155端口地址的引脚有哪些?IO/M的作用是什么?T/IN和T/OUT的作用是什么? 1. AD0~AD7(8条)三态地址/数据线 控制总线(8条) I/O总线(22条) 电源线(2条) 2. IO/M为I/O口及存储器选择信号,若IO/M=0,则选择存储器;否则 选择I/O口; 3. T/IN为定时器输入,定时器工作所需的时钟信号由此端输入。T/OUT 为定时器输出; 5-13 LED数码管显示器在单片机系统中有哪几种显示方式? LED显示器的显示方式可分为静态显示和动态显示两种。 静态显示是指每个数码管的段选线控制是独立的,其特点是各LED管能稳定地同时显示各自的字形。 动态显示又称扫描显示方式,它是将每个数码管的段选线同名相连,在某一时刻只让一根位选线有效,同时在段选线上输出该位要显示的字形码,在下

MSP430单片机中断的定义及原理

MSP430单片机中断的定义及原理 430的中断是按照下图1的优先级顺序定义的,有三种中断:1.系统重置、2.不可屏蔽中断(NMI)、3.可屏蔽中断。 图1.中断优先级 部分具体的中断优先级由高到低为: PORT2_VECTOR (1 * 2u)/* 0xFFE2 Port 2 */ PORT1_VECTOR (4 * 2u)/* 0xFFE8 Port 1 */ TIMERA1_VECTOR (5 * 2u)/* 0xFFEA TImer A CC1-2,TA */ TIMERA0_VECTOR (6 * 2u)/* 0xFFEC TImer A CC0 */ ADC_VECTOR (7 * 2u)/* 0xFFEE ADC */ USART0TX_VECTOR (8 * 2u)/* 0xFFF0 USART 0 Transmit */ USART0RX_VECTOR (9 * 2u)/* 0xFFF2 USART 0 Receive */ WDT_VECTOR (10 * 2u)/* 0xFFF4 Watchdog TImer */ COMPARATORA_VECTOR (11 * 2u)/* 0xFFF6 Comparator A */ TIMERB1_VECTOR (12 * 2u)/* 0xFFF8 Timer B CC1-2,TB */ TIMERB0_VECTOR (13 * 2u)/* 0xFFFA Timer B CC0 */ NMI_VECTOR (14 * 2u)/* 0xFFFC Non-maska××e */ RESET_VECTOR (15 * 2u)/* 0xFFFE Reset [Highest Priority]*/ 其中可屏蔽中断分为系统NMI(SNMI)和用户NMI(UNMI),一般来说,不可屏蔽中断不受GIE标志位的影响。用户不可屏蔽中断的中断源为NMIIE、ACCIE和OFIE,当响应用户不可屏蔽中断后,其他不可屏蔽中断就自动被禁止,以防止同级别的中断发生产生中断嵌套。当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)。有中断响应以后自动关闭总中断,这个时候即使来更高优先级的中断都不会响应。要中断嵌套的话,就必须在中断中打开总中断。

基于单片机的电子时钟6位LED数码管显示

数码管显示电子时钟设计 一.功能要求 1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时 间时、分、秒。 2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。 二.方案论证 1.数字时钟方案 数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。 方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。 方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。 基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。 2.数码管显示方案 方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,

指示灯、数码管的中断控制实验报告

学生实验报告 (参考样本) 学院:软件与通信工程 课程名称:单片机原理 专业班级:通信101 姓名 : 学号:

学生实验报告 一、实验目的及要求: 1、目的 掌握外部中断原理,学习中断编程与程序调试方法。 2、内容及要求 熟悉uvision3的软件调试方法; 完成c51语言编程 练习uvision3与ISIS的联机仿真方法 三、实验方法与步骤: #include sbit P0_4 = P0^4; unsigned char count = 0; unsigned char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71}; void main() { P2 = 0x00; P0_4 = 0;

EA = 1; EX1 = EX0 = 1; IT1 = IT0 = 1; while(1); } void INT_0SVR() interrupt 0 { P0_4 = !P0_4; } void INT_1SVR() interrupt 2 { count++; if(count==16) count = 1; P2 = led_mod[count]; } 四、实验结果与数据处理:

五、讨论与结论 通过做此次实验,了解了相关中断的知识,了解了自己有关中断知识的不足,有待学习。 六、指导教师评语及成绩: 评语:指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价和价值

相关主题
文本预览
相关文档 最新文档