当前位置:文档之家› 基于单片机的GPS串口中断接收程序

基于单片机的GPS串口中断接收程序

基于单片机的GPS串口中断接收程序
基于单片机的GPS串口中断接收程序

#include

#include "1602.h"

sbit GPS_SPD=P1^1; //GPS模块速率设置

sbit KEY1=P1^0; //显示内容分屏切换

char code TIME_AREA= 8; //时区

//GPS数据存储数组

unsigned char JD[10]; //经度

unsigned char JD_a; //经度方向

unsigned char WD[9]; //纬度

unsigned char WD_a; //纬度方向

unsigned char date[6]; //日期

unsigned char time[6]; //时间

unsigned char speed[5]={'0','0','0','0','0'}; //速度

unsigned char high[6]; //高度

unsigned char angle[5]; //方位角

unsigned char use_sat[2]; //使用的卫星数

unsigned char total_sat[2]; //天空中总卫星数

unsigned char lock; //定位状态

//串口中断需要的变量

unsigned char seg_count; //逗号计数器

unsigned char dot_count; //小数点计数器

unsigned char byte_count; //位数计数器

unsigned char cmd_number; //命令类型

unsigned char mode; //0:结束模式,1:命令模式,2:数据模式unsigned char buf_full; //1:整句接收完成,相应数据有效。0:缓存数据无效。unsigned char cmd[5]; //命令类型存储数组

//显示需要的变量

unsigned int dsp_count; //刷新次数计数器

unsigned char time_count;

bit page;

void sys_init(void);

bit chk_key(void);

main()

{

unsigned char i;

char Bhour;

sys_init();

lock=1;

use_sat[0]='0';

use_sat[1]='0';

total_sat[0]='0';

total_sat[1]='0';

while(1){

if(buf_full==0) //无GPS信号时

{

dsp_count++;

if(dsp_count>=65000){

LCD_cls(); //清屏

LCD_write_string(0,0,"No GPS connect..");

LCD_write_string(0,1,"Please Check..");

while(buf_full==0);

LCD_cls();

dsp_count=0;

}

}

else{ //有GPS信号时

if(chk_key()){ //检测到按键切换显示

page=!page;

LCD_cls();

}

if(!page){ //页面1

if(buf_full|0x01){ //GGA语句

if(lock==0){ //如果未定位

LCD_write_string(0,0,"*---.--.---- ");

LCD_write_string(0,1,"* --.--.---- ");

}else{ //如果已定位

LCD_write_char(0,0,JD_a); //显示经度

for(i=0;i<10;i++){

LCD_write_char(i+1,0,JD[i]);

}

LCD_write_char(0,1,WD_a); //显示纬度

LCD_write_char(1,1,' ');

for(i=0;i<9;i++){

LCD_write_char(i+2,1,WD[i]);

}

}

LCD_write_char(14,1,use_sat[0]); //显示接收卫星数

LCD_write_char(15,1,use_sat[1]);

buf_full&=~0x01;

dsp_count=0;

}

if(buf_full|0x02){ //GSV语句

LCD_write_char(14,1,total_sat[0]);

LCD_write_char(15,1,total_sat[1]);

buf_full&=~0x02;

dsp_count=0;

}

if(buf_full|0x04){

if(lock==0){ //如果未定位

LCD_write_string(0,0,"*---.--.---- ");

LCD_write_string(0,1,"* --.--.---- ");

}else{ //如果已定位

LCD_write_char(0,0,JD_a); //显示经度

for(i=0;i<10;i++){

LCD_write_char(i+1,0,JD[i]);

}

LCD_write_char(0,1,WD_a); //显示纬度

LCD_write_char(1,1,' ');

for(i=0;i<9;i++){

LCD_write_char(i+2,1,WD[i]);

}

}

LCD_write_char(14,0,use_sat[0]); //显示接收卫星数

LCD_write_char(15,0,use_sat[1]);

buf_full&=~0x04;

dsp_count=0;

}

}

else{ //页面2

if(buf_full|0x01){ //GGA语句

buf_full&=~0x01;

dsp_count=0;

}

if(buf_full|0x02){

buf_full&=~0x02;

dsp_count=0;

}

if(buf_full|0x04){ //RMC语句

Bhour=((time[0]-0x30)*10+time[1]-0x30)+TIME_AREA;

if(Bhour>=24){

Bhour-=24;

}else if(Bhour<0){

Bhour+=24;

}

LCD_write_char(0,1,date[4]);

LCD_write_char(1,1,date[5]);

LCD_write_char(2,1,date[2]);

LCD_write_char(3,1,date[3]);

LCD_write_char(4,1,date[0]);

LCD_write_char(5,1,date[1]);

LCD_write_char(8,1,Bhour/10+0x30);

LCD_write_char(9,1,Bhour%10+0x30);

LCD_write_char(10,1,':');

LCD_write_char(11,1,time[2]);

LCD_write_char(12,1,time[3]);

LCD_write_char(13,1,':');

LCD_write_char(14,1,time[4]);

LCD_write_char(15,1,time[5]);

LCD_write_string(5,0,"knot A");

if(lock=='0'){ //如果未定位

LCD_write_string(0,0,"---.-");

LCD_write_string(11,0,"---.-");

}else{ //已经定位

for(i=0;i<5;i++){ //knot显示

LCD_write_char(i,0,speed[i]);

}

for(i=0;i<5;i++){

LCD_write_char(11+i,0,angle[i]);

}

}

buf_full&=~0x04;

dsp_count=0;

}

}

}

}

}

bit chk_key(void)

{

if(!KEY1){

delayms(10);

if(!KEY1){

while(!KEY1);

delayms(10);

return(1);

}

}

return(0);

}

//系统初始化

void sys_init() {

unsigned char i;

SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */

TMOD = 0x21; /* TMOD: timer 1, mode 2, 8-bit reload */

if(GPS_SPD)

{

TH1 = 0xfa; /* TH1: reload value for 4800 baud @ 11.059MHz */ }

else

{

TH1 = 0xfd; /* TH1: reload value for 9600 baud @ 11.059MHz */ }

TR1 = 1; /* TR1: timer 1 run */

LCD_init(8); //初始化LCD

LCD_write_string(0,0," GPS SIRF II 2 ");

LCD_write_string(0,1," 11-11-23 1342 ");

for(i=1;i<4;i++){

delayms(250);

}

//LCD_cls();

IE=0x90; //开总中断、串口中断

}

//串口接收中断

void uart(void) interrupt 4

{

unsigned char tmp;

if(RI){

tmp=SBUF;

// SBUF=tmp;

// if(TI)TI=0;

switch(tmp){

case '$':

cmd_number=0; //命令类型清空

mode=1; //接收命令模式

byte_count=0; //接收位数清空

break;

case ',':

seg_count++; //逗号计数加1

byte_count=0;

break;

case '*':

switch(cmd_number){

case 1:

buf_full|=0x01;

break;

case 2:

buf_full|=0x02;

break;

case 3:

buf_full|=0x04;

break;

}

mode=0;

break;

default:

if(mode==1){

//命令种类判断

cmd[byte_count]=tmp; //接收字符放入类型缓存

if(byte_count>=4){ //如果类型数据接收完毕,判断类型

if(cmd[0]=='G'){

if(cmd[1]=='P'){

if(cmd[2]=='G'){

if(cmd[3]=='G'){

if(cmd[4]=='A'){

cmd_number=1;

mode=2;

seg_count=0;

byte_count=0;

}

}

else if(cmd[3]=='S'){

if(cmd[4]=='V'){

cmd_number=2;

mode=2;

seg_count=0;

byte_count=0;

}

}

else if(cmd[2]=='R'){

if(cmd[3]=='M'){

if(cmd[4]=='C'){

cmd_number=3;

mode=2;

seg_count=0;

byte_count=0;

}

}

}

}

}

}

}

else if(mode==2){

//接收数据处理

switch (cmd_number){

case 1: //类型1数据接收。GPGGA

switch(seg_count){

case 2: //纬度处理

if(byte_count<9){

WD[byte_count]=tmp;

}

break;

case 3: //纬度方向处理

if(byte_count<1){

WD_a=tmp;

}

break;

case 4: //经度处理

if(byte_count<10){

JD[byte_count]=tmp;

}

break;

case 5: //经度方向处理

if(byte_count<1){

JD_a=tmp;

}

break;

case 6: //定位判断

if(byte_count<1){

lock=tmp;

break;

case 7: //定位使用的卫星数

if(byte_count<2){

use_sat[byte_count]=tmp;

}

break;

case 9: //高度处理

if(byte_count<6){

high[byte_count]=tmp;

}

break;

}

break;

case 2: //类型2数据接收。GPGSV

switch(seg_count){

case 3: //天空中的卫星总数

if(byte_count<2){

total_sat[byte_count]=tmp;

}

break;

}

break;

case 3: //类型3数据接收。GPRMC

switch(seg_count){

case 1: //时间处理

if(byte_count<6){

time[byte_count]=tmp;

}

break;

case 2: //定位判断

if(byte_count<1){

if (tmp=='A') {lock=1;}

else{

lock=0;}

}

break;

case 3: //纬度处理

if(byte_count<9){

WD[byte_count]=tmp;

}

break;

case 4: //纬度方向处理

if(byte_count<1){

WD_a=tmp;

}

break;

case 5: //经度处理

if(byte_count<10){

JD[byte_count]=tmp;

}

break;

case 6: //经度方向处理

if(byte_count<1){

JD_a=tmp;

}

break;

case 7: //速度处理

if(byte_count<5){

speed[byte_count]=tmp;

}

break;

case 8: //方位角处理

if(byte_count<5){

angle[byte_count]=tmp;

}

break;

case 9: //方位角处理

if(byte_count<6){

date[byte_count]=tmp;

}

break;

}

break;

}

}

byte_count++; //接收数位加1

break;

}

}

RI=0;

}

AVR单片机教程13—第十三课 ATMEAG16L的外部中断编程实践

—————————————————————————— 第十三课ATMEAG16L的外部中断编程实践 本教程节选自周兴华老师《手把手教你学AVR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书 实验器材,可登陆周兴华单片机培训中心网购部自助购买! Atmega16L具有多达20个中断源,这里我们进行外部中断的实验,其它的等到介绍到相关内容时可进行适当的实验。 1.外部中断0 外部中断0由引脚INT0(PIND2)触发。如果INT0引脚按照MCUCR寄存器中的ISC01、ISC00设置的方式发生跳变,则不管是否lNT0中断使能,INT0中断标志位INTF0都将置位。如果SREG 寄存 器的全局中断位I和通用中断控制寄存器GICR中的INT0中断使能位INT0置位,则单片机培训开始 执行中断程序。在进入中断服务程序时,INTF0被硬件清零。必须指出,不管INT0(PIND2)引脚 方向位设置如何,只要INT0引脚发生规定的跳变,都会触发中断。中断标志位INTF0只在满足发生 中断的条件时置位,一旦条件变化,INTF0被硬件清零。向INTF0位写“1”也会对其清零。 2.外部中断1 外部中断0由引脚INT1(PIND3)触发。如果INT1引脚按照MCUCR寄存器中的ISC11、ISC10设置的方式发生跳变,则不管是否lNT1中断使能,INT1中断标志位INTF1都将置位。如果SREG 寄存 器的全局中断位I和通用中断控制寄存器GICR中的INT1中断使能位INT1置位,则开始执行中断程 序。在进入中断服务程序时,INTF1被硬件清零。必须指出,不管INT1(PIND3)引脚方向位设置 如何,只要INT1引脚发生规定的跳变,FPGA培训都会触发中断。中断标志位INTF1只在满足发生 中断的条件时置位,一旦条件变化,INTF1被硬件清零。向INTF1位写“1”也会对其清零。 3.外部中断2 外部中断2由引脚INT2(PINB2)触发。如果INT2引脚按照MCUCR寄存器中的ISC2设置的方式发生跳变,则不管是否lNT2中断使能,INT2中断标志位INTF2都将置位。如果SREG 寄存器的全局 中断位I和通用中断控制寄存器GICR中的INT2中断使能位INT2置位,则开始执行中断程序。在进 入中断服务程序时,INTF2被硬件清零。必须指出,不管INT2(PINB2)引脚方向位设置如何,只 要INT2引脚发生规定的跳变,都会触发中断。中断标志位INTF2只在满足发生中断的条件时置位, 一旦条件变化,INTF2被硬件清零。向INTF1位写“1”也会对其清零。 8.2.1 INT1中断实验

单片机中断程序大全

单片机中断程序大全公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-

//实例42:用定时器T0查询方式P2口8位控制L E D闪烁#include // 包含51单片机寄存器定义的头文件void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 TF0=0; P2=0xff; while(1)//无限循环等待查询 { while(TF0==0) ; TF0=0; P2=~P2; TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 //实例43:用定时器T1查询方式控制单片机发出1KHz音频

#include // 包含51单片机寄存器定义的头文件sbit sound=P3^7; //将sound位定义为P3.7引脚 void main(void) {// EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%256; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 TF1=0; while(1)//无限循环等待查询 { while(TF1==0); TF1=0; sound=~sound; //将P3.7引脚输出电平取反 TH1=(65536-921)/256; //定时器T0的高8位赋初值 TL1=(65536-921)%256; //定时器T0的高8位赋初值 } } //实例44:将计数器T0计数的结果送P1口8位LED显示 #include // 包含51单片机寄存器定义的头文件sbit S=P3^4; //将S位定义为P3.4引脚

基于单片机的GPS信息与轨迹显示

学号: 08417127 常州大学 毕业设计(论文)开题报告 (2012届) 题目基于单片机的GPS信息与轨迹显示设计 学生章台 学院信息科学与工程学院专业班级自动化101 校内指导教师专业技术职务副教授 校外指导老师专业技术职务 二○一二年三月

题目:单片机控制的GPS信息系统设计 一、前言 1.课题研究的意义,国内外研究现状和发展趋势 1958年由美国海军武器实验室着手建立的“海军卫星导航系统”在导航技术的发展中具有划时代的意义,但是由于该系统卫星数目较少(5~6 颗)、运行高度较低(平均约1000km)、从地面站观测到卫星的时间间隔较长(平均约1.5 小时),因而它无法提供连续的实时三维导航。所以该系统在大地测量学和地球动力学研究方面的应用也受到了很大的限制[1]。为了满足军事部门和民用部门对连续实时和三维导航的迫切要求,1973 年美国国防部正式开始组织海陆空三军,共同研究建立新一代卫星导航系统的计划。这就是“授时与测量导航系统/全球定位系统”(Navigation System Timing and Ranging/Global Positioning System-NAVSTAR/GPS),通常简称为“全球定位系统(GPS)”。现在GPS已在各领域尤其是导航系统中得到广泛应用[2]。 研究的意义:卫星导航技术的飞速发展已逐渐取代了无线电导航、天文导航等传统导航技术,成为一种普遍采用的导航定位技术,并在精度、实时性、全天候作业等方面取得了长足进步[3]。现在不仅应用于物理勘探、电离层测量和航天器导航等诸多民用领域,在军事领域更是取得了广泛的应用。在弹道导弹、野战指挥系统、精确弹道测量以及军用地图快速测绘等领域均大量采用了卫星导航定位技术。鉴于卫星导航技术在民用和军事领域的重要意义,得到了许多国家的关注。 国内外研究现状:以美国GPS和俄罗斯GLONASS为代表的卫星导航系统在世界范围内得到广泛的认可和应用。尤其是美国为保持这一领域的垄断地位,一方面取消限制政策,一方面改进GPS系统性能(即GPS技术现代化:增加卫星数目,改变星座方案,增辟第二民用频率等),鼓励私营公司投资GPS事业,鼓励GPS导航定位系统成为国际标准。这一政策大大鼓舞了美国及世界各大公司发展GPS产业的信心,并推进了GPS应用和产业发展。除俄罗斯外欧盟等国也在相继发展各自的全球定位系统,自主开发定位系统产品,以便占有导航定位市场,掌握控制权。因此,卫星导航定位产业和竞争都将进入新的阶段。我国在卫星导航定位应用方面主要是以美国的GPS技术为代表。随着GPS技术的深入发展,历经十多年我国在应用与理论方面都得到了很大的发展。引进的GPS接收机主要应用于测绘、资源勘探等静态定位,成倍地提高了作业效率,为国家节约了大量经费,并在过去人迹罕至的高原、沙漠、海洋也获得了大量的定位成果,在国家制图、城乡建设开发、资源勘察等方面有了技术保障。尤其是2000年5月美国总统宣布取消SA政策后[4],在广大的普通用户中受益最大,可靠性和精度都得到了提高。 发展趋势:根据目前GPS的发展状况,GPS未来技术发展特点主要表现为以下几个特点。(1)卫星导航的多系统并存。未来几年用户将面临四大系统(GPS/GLONASS/北斗星/Galileo)近百颗导航卫星并存,相互兼容的局面。再者是多系统[5],多层次导航

51单片机独立按键程序查询法和外部中断两种

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111代表第一个程序。//2222222222222222222222222代表第二个程序,以此类推 //1111111111111111111111111111111111111111111111111111111111111111111 //1111111111111111111111111111111111111111111111111111111111111111111 /****************************************************************************** * * 实验名: 左右流水灯实验 * 使用的IO : LED使用P2,键盘使用P3.1 * 实验效果: 按下K1键, * 注意: ******************************************************************************* / #include #include #define GPIO_LED P2 sbit K1=P3^1; void Delay10ms( ); //延时10ms /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main(void) { unsigned int i,j; j=0xfe; //1111_1110 while(1) { GPIO_LED=j; if(K1==0) //检测按键K1是否按下 { Delay10ms(); //消除抖动 if(K1==0) {

ATMega16单片机外部中断的使用

ATMega16单片机外部中断的使用[日期:2010-09-24 ] [来源:本站原创作者:佚名] [字体:大中小] (投递新闻) // Crystal: 7.3728Mhz ,功能:学习外部中断0的程序 #include #include #define LED_COM PORTA ^= (1 << PA6) // void port_init(void) { PORTA = 0x40; DDRA = 0x40; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x04; DDRD = 0x00; } #pragma interrupt_handler int0_isr:2 void int0_isr(void)

LED_COM; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x00; GICR = 0x40; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void main() { init_devices(); while(1)

基于单片机的GPS定位系统

大学实验室开放项目成果(论文)题目:基于单片机的GPS定位系统

摘要 全球定位系统(GPS)是美国研发的第二代卫星无线电导航系统。其目的是在全球范围内对地面和空中目标进行准确定位和监测。它能为用户提供全球性、全天候、连续、实时、高精度的三维坐标、三向速度和时间信息。随着GPS的民用化与成本的降低,已经走入了人们的日常生活中,很多手机、PDA 等手持设备都配备了GPS功能。本文主要研究GPS 的定位原理与技术,单片机的编程及其应用,液晶屏的功能及其实现方法本控制系统主要完成接受数据、时间显示、经度显示、纬度显示等常规功能。此方案基于单片机、GPS模块和12864液晶显示屏等硬件, 并应用C语言实现了GPS信号的提取、显示及基本的键盘控制操作等。经过实践测试 ,这种接收机可以达到基本GPS信息的接收以及显示,可以做到体积小、精度高、连续导航,本设计在测控领域的应用开发中具有一定的实用价值和借鉴价值。 关键词:GPS定位,液晶显示,单片机

Abstract Global Positioning System (GPS) is a U.S. research and development of the second generation satellite radio navigation system. Its purpose is worldwide on the ground and air targets for accurate positioning and monitoring. It provides users with a global, all-weather, continuous, real-time, high-precision three-dimensional coordinates, three velocity and time information. With the GPS civilian and cost reduction, has been into people's daily life, many cell phone, PDA and other handheld devices are equipped with GPS. This paper studies the principles and techniques of GPS positioning, microcontroller programming and its application, the function of the LCD screen and its implementation method of the control system is mainly complete to accept data, time display, display longitude, latitude, display and other regular features. This scheme is based on single-chip, GPS module and 12,864 LCD screen and other hardware, and apply the C language implementation of the GPS signal extraction, display and keyboard control basic operations. After practice tests, this receiver can meet the basic GPS receivers and display, you can do small size, high accuracy, continuous navigation, monitoring and control of the design in the field of application development has certain practical value and reference value. Keywords: GPS positioning, LCD, microcontroller

基于51单片机的GPS定位系统的设计

第一章51单片机概述....................................................................................................... - 1 - 1.1 单片机概述............................................................................................................. - 1 - 1.2 51单片机系统的结构组成及性能 .................................................................. - 1 - 1.2.1 结构组成...................................................................................................... - 1 - 1.2.2 80C51单片机引脚介绍........................................................................... - 2 - 1.2.3 单片机主要部件功能............................................................................... - 3 - 1.3 8255芯片介绍....................................................................................................... - 4 - 1.3.1 工作原理...................................................................................................... - 5 - 1.3.2 工作方式...................................................................................................... - 5 - 1.4 8250芯片介绍....................................................................................................... - 6 - 1.5 LCD液晶显示器介绍 ......................................................................................... - 6 - 第二章GPS定位系统简介.............................................................................................. - 7 - 2.1 GPS定位系统的发展.......................................................................................... - 7 - 2.2 GPS定位系统的基本原理................................................................................. - 7 - 2.3 GPS模块的主要技术参数................................................................................. - 8 - 2.4 GPS定位系统的组成部分................................................................................. - 8 - 2.5 GPS定位的流程................................................................................................... - 9 - 2.6 GPS定位系统的特点.......................................................................................... - 9 - 第三章硬件连接电路...................................................................................................... - 11 - 3.1 电路设计要求与目的 ........................................................................................ - 11 - 3.2 电路设计原理...................................................................................................... - 11 - 3.3 GPS与单片机、LCD的电路连接 ................................................................ - 12 - 第四章软件设计............................................................................................................... - 13 - 4.1 系统工作流程...................................................................................................... - 13 - 4.2 软件的设计........................................................................................................... - 13 - 4.2.1 程序框图.................................................................................................... - 13 - 4.2.2 实验连线.................................................................................................... - 15 - 4.2.3 运行实验程序GPS.ASM ...................................................................... - 15 - 4.3 数据显示与分析 ................................................................................................. - 17 -

单片机外部中断线的作用

单片机外部中断线的作用 这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。图中的蓝色虚线箭头,标出了外部中断信号的传输路径。 首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断挂起请求寄存器,最后经过编号4的与门输出到NVIC中断检测电路,这个边沿检测电路受上升沿或下降沿选择寄存器控制,用户可以使用这两个寄存器控制需要哪一个边沿产生中断,因为选择上升沿或下降沿是分别受2个平行的寄存器控制,所以用户可以同时选择上升沿或下降沿,而如果只有一个寄存器控制,那么只能选择一个边沿了。 接下来是编号3的或门,这个或门的另一个输入是软件中断/事件寄存器,从这里可以看出,软件可以优先于外部信号请求一个中断或事件,即当软件中断/事件寄存器的对应位为“1”时,不管外部信号如何,编号3的或门都会输出有效信号。 一个中断或事件请求信号经过编号3的或门后,进入挂起请求寄存器,到此之前,中断和事件的信号传输通路都是一致的,也就是说,挂起请求寄存器中记录了外部信号的电平变化。 外部请求信号最后经过编号4的与门,向NVIC中断控制器发出一个中断请求,如果中断屏蔽寄存器的对应位为“0”,则该请求信号不能传输到与门的另一端,实现了中断的屏蔽。明白了外部中断的请求机制,就很容易理解事件的请求机制了。图中红色虚线箭头,标出了外部事件信号的传输路径,外部请求信号经过编号3的或门后,进入编号5的与门,这个与门的作用与编号4的与门类似,用于引入事件屏蔽寄存器的控制;最后脉冲发生器的一个跳变的信号转变为一个单脉冲,输出到芯片中的其它功能模块。从这张图上我们也可以知道,从外部激励信号来看,中断和事件的产生源都可以是一样的。之所以分成2个部分,由于中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等;

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能: (1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成) C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); }

Void main { EA=1; EX0=1; EX1=1; ITO=1; IT1=1; PX0=1; PX1=0; While(1); } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) { While(1) { P2_1=1; delay02s(); P2_1=0; delay02s(); } } }

最新单片机课程设计 外部中断控制流水灯变化

单片机课程设计报告 设计题目:外部中断控制流水灯变化 姓名

一.设计目的 通过学习单片机工作原理和各种工作方式及各管脚的功能,想通过P3口的俩管脚P3.2和P3.3第二功能,即外部中断来使CPU响应,达到控制流水灯的目的。 二.设计要求 主程序实现8个灯从P2.0到P2.7依次亮灭,灯与灯 之间间歇约0.5秒.当P3.3口是低电平时,灯从P2.7到P2.0依次亮灭,灯与灯之之间间歇约0.5秒.循环3次返回主程序.当P3.2口是低电平时,灯全灭,当P3.2口是高电平时,返回主程序.当同时使P3.2和P3.3为低电平时,灯全灭,因为外部中断0的优先级高于外部中断1的优先级. 三.MCS-51的硬件结构: 四.P3口的状态 P3口是双功能口,默认为第一功能(通用I/O口),通过编程可设置第二功能。

五.中断传送方式: 中断方式则是在外设为数据传送做好准备之后,就向CPU发出中断请求信号(相当于通知CPU)。CPU接收到中断请求信号之后立即作 出响应,暂停正在执行的原程序(主程序),而转去外设的数据输入输 出服务,待服务完之后,程序返回。CPU再继续执行被中断的原程序。六.外部中断 外部中断是指从单片机外部引脚输入请求信号。输入/输出的中断请求、实时事件的中断请求、掉电和设备故障的中断请求都可以作为 外部中断源,从引脚INT0、INT1输入。 外部中断请求、有两种触发方式:电平触发及跳变(边沿)触发。 这两种触发方式可以通过对特殊功能寄存器TCON编程来选择。七.电路原理逻辑图如下:

P3.3 P3.2 灯亮情况 0 0 全灭 0 1 全灭 1 0 从P2.0到P2.7依次亮灭 1 1 从P2.7到P2.0依次亮灭八.实验硬件电路图如下

(完整版)基于单片机的GPS定位系统设计本科毕业设计

本科毕业设计(论文) 题目基于单片机的GPS定位 系统设计

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

单片机外部中断的使用

哈尔滨理工大学荣成学院 单片机原理及应用Protues 仿真实验 班级: 学号: 姓名: 日期:

实验三单片机外部中断的使用 一、实验名称:单片机外部中断的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4..实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 在Proteus 环境下建立如下仿真原理图,并保存为文件;

原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件;汇编语言参考程序如下:ORG 0000H

LJMP MAIN ORG H ;外部中断0程序入口地址LJMP EXINT0 ORG 0030H MAIN: MOV SP,#60H ;堆栈指针初始化 SETB ;设置外部中断 0 为边沿触发 SETB ;开外部中断0 SETB ;开CPU总中断MOV A,#01H LOOP: MOV P1,A RL A CALL DELAY SJMP LOOP DELAY: MOV R1,# ;延时250ms子程序DL1: MOV R2,# DL2: MOV R3,# DJNZ R3,$ DJNZ R2,DL2 DJNZ R1,DL1 ;延时子程序返回EXINT0: PUSH PUSH CLR RS1 SETB RS0 MOV R0,# LP: MOV P1,#0FFH CALL DELAY MOV P1,#00H CALL DELAY DJNZ R0,LP POP PSW POP ACC ;中断返回END 将以上程序补充完整,流水时间间隔,闪烁时间间隔为250ms。C51语言参考程序: #include #include #define uchar unsigned char #define uint unsigned int void delay_ms(uint x) { uint i; uchar j; for(i=0;i

最新——基于单片机的GPS定位显示系统

基于单片机的GPS定位显示系统 赵倩妮 (吉首大学张家界学院,湖南吉首 416000) 摘要 GPS全球定位系统在实际生活中被广泛应用,是当今信息时代发展中的重要组成部分。因其具有性能好、精度高、应用广的特点,使其成为了迄今最好的导航定位系统。本文以郑州紫辰科技开发有限公司的ZG-P1121Q GPS接收模块为例,介绍了GPS的通信协议。讨论了基于单片机的GPS接收系统设计, 提出了对GPS 全球定位系统定位信息的接收以及对各定位参数数据的提取方法,并给出了系统的硬件电路及软件流程图。通过本设计方法,本系统由单片机控制GPS模块较为精确地计算和显示日期、时间、经度、纬度等卫星信息。 关键词:GPS;ZG-P1121Q;单片机;MGLS-12864

Design of Global Positioning System Based on Single Chip Microcontroller Zhaoqianni (College of Zhangjiajie,Jishou University,Jishou,Hunan 416000) Abstract The Global Positioning System is an very importeant part in the information time, which is widely implied in our pratical life. It's the characteristic of perfect performance, high precision and widely impliment that makes it the best navigation positioning system till now. This article has introduced the GPS correspondence agreement taking the ZG-P1121Q GPS sending and receiving moule that provided by the Beijing Techshine Science and Technology Limited Company as an example. And discussed the system design on the base of single chip computer, proposed the method of the GPS system's imformation's receiving and withdrawing of the position parameter data. The article has provided the hardware circtuit and software struct. The system that the single chip computer cotrolling the GPS module can precisely calculate and show the satellite information of date, time, longitude, latitude and so on. Key words:GPS; ZG-P1121Q; Microcontroller; MGLS-12864

简述51系列单片机的中断响应地条件

简述51系列单片机中断响应的条件。●有中断源发出中断请求;●中断总允许位EA=1,即CPU开中断;●申请中断的中断源的中断允许位为1,即中断没有屏蔽;●无同级或更高级中断正在被服务;●当前的指令周期已经结束;●若现在指令为RETI或者是访问IE 或IP指令,则该指令以及紧接着的另一条指令已执行完 简述定时/计数器4种工作模式的特点。模式1:是16位的定时器/计数器; 模式2:把TL0(或TL1)配置成一个可以自动重装载的8位定时器/计数器;模式3:对T0和T1大不相同。若将T0设置为模式3,则TL0和TH0被分为两个相互独立的8位计数器。定时器T1无工作模式3状态。模式0:与模式1几乎完全相同,唯一的差别是模式0中,寄存器TL0用5位,TH0用8位。 单片机原理及应用试卷3 一、填空题 1、MCS—51单片机的运算电路包括了算术逻辑运算单元ALU 累加器A B 寄存器以及状态字寄存器PSW和暂存寄存器等部件。 2、MCS—5l单片机的最大程序寻址空间是 64K ,该空间的地址范围为: 0000H 至FFFFH 系统上电及复位的程序人口地址为 0000H 。 3、MCS-51单片机的一个机器周期包含了 6 个状态周期,每个状态周期又可划分为 2 拍节,一个机器周期实际又包含了 12 个振荡器周期。 4、单片机与普通计算机的不同之处在于其将 CPU、存储器、I/O口三部分集成于一块芯片上。 5、8031单片机复位后,R4所对应的存储单元的地址为 04H ,因上电时PSW= 00H 。这时当前的工作寄存器区是 0 组工作寄存器区。 6、片内RAM低128个单元划分为工作寄存器区、位寻址区、数据缓冲区 3个主要部分。 7、指令格式是由操作码、操作数、和所组成,也可能仅由操作码组成。 8、8031单片机响应中断后,产生长调用指令LCALL,执行该指令的过程包括:首先把 pc 的内容压入堆栈,以进行断点保护,然后把长调用指令的16位地址送 pc ,使程序执行转向程序存储器中的中断地址区。 9、在MCS-51中,PC和DPTR都用于提供地址,但PC是为访问程序存储器提供地址,而DPTR是为访问数据存储器提供地址。 10、假定,SP=60H,A=30H,B=70H,执行下列指令: PUSH A PUSH B 后,SP的内容为 62h ,61H单元的内容为 30h ,62H单元的内容为 70h 。 二、选择题 1.当MCS-51单片机接有外部存储器,P2口可作为( ) D.输出高8位地址2.MCS—5l单片机的堆栈区是设置在( )中。 C.片内RAM区

51单片机外部中断与定时器的实用

中断使能寄存器 通过设置中断使能寄存器 IE 的 EA 位 使能所有中断 每个中断源都有单独的使能位 可通过软件设置 IE 中相应的使能位在任何时候使能或禁能中断 中断使能寄存器 IE 的各 位如下所示 中断使能寄存器IE 位地址 0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H 位符号 EA / ET2 ES ET1 EX1 ET0 EX0 EA 使能标志位 置位则所有中断使能 复位则禁止所有中断保留 ET2 定时器2 中断使能 ES 串行通信中断使能 ET1 定时器 1 中断使能 EX1 外部中断 1 使能 ET0 定时器0 中断使能 EX0 外部中断 0使能 8051 支持两个中断优先级 有标准的中断机制, 低优先级的中断只能被高优先级的中断所中断 ,而高优先级的中断不能被中断。 中断优先级寄存器 每个中断源都可通过设置中断优先级寄存器IP 来单独设置中断优先级 如果每个中断源的相应位被置位 则该中断源的优先级为高,如果相应的位被复位, 则该中断源的优先级为低, 如果你觉得两个中断源不够用 ,别急以后我会教你如何增加中断优先级 表 A-5 示出了 IP 寄存器的各位 此寄存器可位寻址 IP 寄存器 位地址 0BFH 0BEH 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H 位符号 / / / PS PT1 PX1 PT0 PX0 编号 中断源 中断向量 上电复位 0000H 0 外部中断0 0003H 1 定时器0溢出 000BH 2 外部中断1 0013H 3 定时器1溢出 001BH 4 串行口中断 0023H 5 定时器2溢出 002BH PT2 定时器 2中断优先级 PS 串行通信中断优先级 PT1 定时器 1中断优先级 PX1 外部中断1 优先级 PT0 定时器0中断优先级 PX0 外部中断0 优先级

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