当前位置:文档之家› PIC实验报告(中断、定时、PWM、AD程序代码)

PIC实验报告(中断、定时、PWM、AD程序代码)

PIC实验报告(中断、定时、PWM、AD程序代码)
PIC实验报告(中断、定时、PWM、AD程序代码)

实验一:定时器

1. 实验目的:利用定时器0,定时器1,定时2实现4盏流水灯

2. 实验内容 a,程序框图

定时器0:

/************************************************** 计算公式:(256-X)*K*T=25 000us,定时器延时25ms,

预分频为K 为64,利用软件编程实现1s 脉冲输出,RB0作为输出 ************************************************/ #include

__CONFIG(0x20F1); __CONFIG(0x3F71); #define T0_25MS 61 char a=0;

void interrupt ISR() {

if(T0IF==1)

定时器1定时500MS

定时器0定时50MS 、定时器1

定时器2定时50MS

时间到? 时间到? 时间到?

a 的值加1 led 灯循环左移一位 a 的值加1

a=20?a=10?

a=0,led 灯循环左移一位 a=0,led 灯循环左移一位

开始

开始

开始

T0IF=0;

TMR0=T0_25MS;

a++;

if(a==20) //输出1s脉冲

{

PORTD=(PORTD<<1);

a=0;

if(PORTD==0x10)

PORTD=0x01;

}

}

}

void timer0init()

{

OPTION=0b10000110; //,预分频器给TMR0,TMR0预分频系数为1:64 INTCON=0b10100000; //GIE,PEIE置1

}

void main()

{

timer0init();

TRISD=0;

PORTD=0x01;

while(1);

}

定时器1:

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

计算公式:(65536-X)*K*T=500 000us,定时器延时500ms,

预分频为8,利用软件编程实现1s脉冲输出,RB0作为输出

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

#include

__CONFIG(0x20F1);

__CONFIG(0x3F71);

#define T1_500MS 3036

void interrupt ISR()

{

if(TMR1IF==1)

{

TMR1IF=0;

TMR1H=T1_500MS>>8;

TMR1L=T1_500MS;

PORTD=(PORTD<<1);

if(PORTD==0x10)

PORTD=0x01;

}

void timer1init()

{

TMR1H=T1_500MS>>8;

TMR1L=T1_500MS;

TMR1IE=1;

INTCON=0b11000000; //GIE,PEIE置1

T1CON=0b00110001;; //TMR1预分频系数为1:8

}

void main()

{

timer1init();

TRISD=0;

PORTD=0x01;

while(1);

}

定时器2:

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

计算公式:(PR2+1)*K1*K2*T=50 000us,定时器延时50ms,

预分频为K1为16,后分频器K2为15利用软件编程实现1s脉冲输出,RB0作为输出************************************************/

#include

__CONFIG(0x20F1);

__CONFIG(0x3F71);

#define LED RB0

char a=0;

void interrupt ISR()

{

if(TMR2IF==1)

{

TMR2IF=0;

a++;

if(a==10) //1秒到了

{

PORTD=(PORTD<<1);

a=0;

if(PORTD==0x10)

PORTD=0x01;

}

}

}

void timer2init()

TMR2IE=1;

PR2=207;

INTCON=0b11000000; //GIE,PEIE置1

T2CON=0B001110111; //TMR2预分频系数为1:16,后分频器为1:15 }

void main()

{

timer2init();

TRISD=0;

PORTD=0x01;

while(1);

}

实验二:RB0中断

1.实验目的:a.利用外部中断RB0实现流水灯左移

2.程序框图:

开始

RB0按下?

进入中断,led灯

循环左移一位

程序:

#include

__CONFIG(0x20F1);

__CONFIG(0x3f71);

void delaynms(unsigned int n);

void interrupt ISR(void);

void main()

{

OPTION=0b00000000;

ANS12=0;

WPUB0=1;

TRISB=0b00000001;

INTCON=0b10010000;

TRISD=0b00000000;

PORTD=0x01;

while(1);

}

void interrupt ISR(void)

{

if(INTF==1)

{

delaynms(30);

INTF=0;

PORTD=(PORTD<<1);

if(PORTD==0x10)

PORTD=0x01;

}

}

void delaynms(unsigned int n)

{

unsigned int j;

char k;

for(j=0;j

for(k=246;k>0;k--)NOP();

}

实验三:AD转换

1.实验目的:利用PIC内部AD转换器,AN0通道口采集模拟数据,通过

LCD1602显示结果

2.程序框图:

程序:

#include

__CONFIG(0x3F39); __CONFIG(0x20F1); #define RS RD4 #define RW RD5 #define E RD6

#define uint unsigned int char QW,BW,SW,GW;

//8段共阳LED 显示代码,0位-7位分别控制a -h 段

const char LED_CODE[]={0b11000000, 0b11111001,0b10100100,0b10110000,0b10011001, 0b10010010,0b10000010,0b11111000,0b10000000,0b10010000,0b01111111}; uint AD_SUB(char k);

void init1602(); //1602初始化 void write_com(char com);//写指令 void write_date(char data);//写数据 void delaynms(unsigned int n); void spiinit();

void SPI_WRITE(char ); void displayled(); void display1602(); void BCD(uint R1); void main() {

uint y;

TRISA=0b00000001;

选择AD 通道

启动AD

GODON E=0?

数据送1602显示

初始化

数据送数码管显示 开始

ANSEL=0b11111111; //AN0~AN7为模拟输入,上电默认,可不设TRISD=0; //D口设置为输出

PORTD=0;

spiinit();

init1602();

while(1)

{

y=AD_SUB(0); //0表示第0个通道

BCD(y);

displayled();

display1602();

delaynms(500); //此不不能忽略

}

}

void BCD(uint R1)

{

QW=0;BW=0;SW=0;GW=0;

while(R1>=1000)

{R1-=1000;QW++;}

while(R1>=100)

{R1-=100;BW++;}

while(R1>=10)

{R1-=10;SW++;}

GW=R1;

}

void displayled()

{

SPI_WRITE(GW); //先发个位

SPI_WRITE(SW); //发十位

SPI_WRITE(BW); //发百位

SPI_WRITE(10); //发小数点

SPI_WRITE(QW); //发千位

}

void display1602()

{

write_com(0x80);

write_date(0x30+QW);

write_date(0x2e); //小数点

write_date(0x30+BW);

write_date(0x30+SW);

write_date(0x30+GW);

write_date(0x56); //"V"

}

void SPI_WRITE(char b)

{

char BUF;

BUF=LED_CODE[b];

SSPBUF=BUF; //发出数据

while(BF==0);

BUF=SSPBUF;

}

void spiinit()

{

TRISC=0b00010000;

SSPEN=1;

CKP=1;

SSPM3=0;

SSPM2=0;

SSPM1=0;

SSPM0=1;

SMP=1;

CKE=0;

}

uint AD_SUB(char k)

{

char i;

uint temp;

float x;

ADCON0=0b01000001; //TAD=8TOSC,

ADFM=1; //设置成右对齐

ADCON0|=(k<<4);

for(i=1;i<5;i++)NOP(); //打开AD通道后延时20us左右GODONE=1; //开始AD转换

while(GODONE==1); //等待转换完成

ADIF=0;

temp=ADRESH<<8;

temp|=ADRESL;

x=temp/1023.0*5.0;

temp=x*1000;

return(temp);

}

void init1602()

{

delaynms(20); //延时时间大于15ms

write_com(0x03);

delaynms(5);

write_com(0x03);

delaynms(5);

write_com(0x03);

delaynms(5);

write_com(0x02); //归HOME位,此不不可少

delaynms(5);

write_com(0x28); //工作方式设置,4位数据线,2行字符,5*7字体write_com(0x0c); //显示开关设置,画面开,光标消失,禁止闪烁write_com(0x06); //输入方式设置,AC为加一计数器

write_com(0x01); //清屏

write_com(0x80); //开始显示位置

delaynms(2);

}

void write_com(char com)

{

RS=0; //写指令

RW=0;

PORTD&=0xf0; //低四位清0

E=1; //有效发送

PORTD|=((com>>4)&0x0f);//先发高四位

delaynms(5);

E=0;

PORTD&=0xf0;

E=1;

PORTD|=(com&0x0f);//再发低四位

delaynms(5);

E=0;

}

void write_date(char data)

{

RS=1; //写数据

RW=0;

PORTD&=0xf0;

E=1;

PORTD|=((data>>4)&0x0f);//先发高四位

delaynms(5);

E=0;

PORTD&=0xf0;

E=1;

PORTD|=(data&0x0f); //再发低四位

delaynms(5);

E=0;

RS=0;

}

void delaynms(unsigned int n)

{

unsigned int j;

char k;

for(j=0;j

for(k=246;k>0;k--)NOP();

}

实验四:PWM

1.实验目的:通过PIC单片机输出PWM不同占空比脉冲波形

2.程序流程:

程序:

#include

__CONFIG(0x3f3a);

char a;

void CSH();

void interrupt ISR(void);

void delaynms(unsigned int n); void main()

{

CSH();

while(1)

{

if(a==0)

开始

初始化占空比为0.1

RB0是

否按下

进入中断,a加1

a=1,则输出占空比0.1 a=2,则

输出占

空比

0.3

a=3,则

输出占

空比

0.6

a=4,则

输出占

空比

0.9

a=5,则

a清0,

占空比

为0.1

CSH();

}

}

void CSH()

{

TRISC2=0;

TRISD=0;

PR2=249;

CCPR1L=0x32;

CCP1CON=0x0c;

T2CON=0x05;

OPTION=0b00000000;

ANS12=0;

WPUB0=1;

TRISB=0b00000001;

INTCON=0b10010000;

}

void interrupt ISR(void)

{

if(INTF==1)

{

delaynms(30);

if(RB0==0)

{

INTF=0;

a++;

switch(a)

{

case 1:CCPR1L=0x19;PR2=249;CCP1CON=0x0c;T2CON=0x05;break; //占空比0.1 case 2:CCPR1L=0x4b;PR2=249;CCP1CON=0x0c;T2CON=0x05;break; //占空比0.3 case 3:CCPR1L=0x96;PR2=249;CCP1CON=0x0c;T2CON=0x05;break; //占空比0.6 case 4:CCPR1L=0xe1;PR2=249;CCP1CON=0x0c;T2CON=0x05;break;// 占空比0.9 case5:a=0;break;

}

}

}

}

void delaynms(unsigned int n)

{

unsigned int j;

char k;

for(j=0;j

for(k=246;k>0;k--)NOP();

}

实验五 外部中断应用实验

外部中断应用实验 设计性试验 2012年11月28日星期三第三四节课 一、实验目的 1、掌握中断系统外部中断源的使用方法。 2、掌握延时程序的编程及使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。 2、在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。 三、电路原理图

四、实验程序流程框图和程序清单及实验结果 /******************** 实验五外部中断应用实验 要求:(1)在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。 (2)在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。 **********************/ ORG 0000H START: LJMP MAIN ORG 0003H LJMP EXINT0 ORG 0013H LJMP EXINT1 ORG 000BH LJMP TTC0 ORG 0100H MAIN: MOV SP, #2FH ;堆栈指针初始化 MOV IE, #10000111B;EA - - ES ET1 EX1 ET0 EX0 MOV TMOD, #01H ;设置定时器T/C0为工作方式1 MOV TH0, #9EH ;设置定时器T0的计数初值为25ms MOV TL0, #58H SETB IT0 ;设置外部中断0为脉冲触发 SETB IT1 ;设置外部中断1为脉冲触发 HERE: LJMP HERE ;等待中断 /*定时器T0中断服务程序*/ ORG 0200H TTC0: CPL P1.2

脉宽调制(PWM)技术在电力电子电路的应用

摘要 【摘要】脉冲调制(PWM)技术最早起源于通信技术的调制、解调的思想,并将这种思想推广到测量、电力电子领域。随着全控型器件的发展与微处理器的出现,PWM技术已经变成为了电力电子领域中的重要技术,特别是在斩波电路、逆变电路。本文主要研究了PWM技术的理论基础(面积等效原理)及其控制原理;分析了在PWM控制下降压斩波电路的工作情况,并用matlab建模;分析了在180°方波控制与SPWM控制两种方法下三相桥式逆变电路的工作状态,对比两种方法的优劣,并考虑了加入死区时间对SPWM的影响。结合异步电机变频调速的相关原理,对SPWM技术控制下的逆变电路进行变化,通过控制输出电压的变化来实现变频调速。选择具体的电路,根据理论分析计算相关的参数。使用Matlab软件进行搭建仿真电路,将仿真得到的数据、波形与理论分析相互分析对照,总结其特点。 【关键词】PWM;DC–DC;DC-AC;MATLAB仿真 I

Abstract 【ABSTRACT】Pulse modulation (PWM) technology originated in the communication technology modulation, demodulation of the idea, and this idea extended to the field of measurement, power electronics. With the development of full-controlled devices with the advent of microprocessors, PWM technology has become an important technology in the field of power electronics, especially in chopping circuits, inverting circuits. This paper mainly studies the theoretical basis of the PWM technology (area equivalent principle) and its control principle. The work of the step-down chopper circuit under PWM control is analyzed and modeled by matlab. The analysis of the 180 ° square wave control and SPWM Control the working state of the three-phase bridge inverter circuit under the two methods, compare the advantages and disadvantages of the two methods, and consider the influence of adding dead time to SPWM. Combined with the principle of asynchronous motor frequency control, SPWM technology under the control of the inverter circuit changes, by controlling the output voltage changes to achieve frequency control. Select the specific circuit, according to the theoretical analysis of the relevant parameters. Using Matlab software to build simulation circuit, the simulation of the data, waveform and theoretical analysis of each other analysis, summed up its characteristics. 【KEYWORDS】PWM ;DC –DC ;DC-AC ; MATLAB simulation

实验二实验报告

PAM和PCM编译码器系统 一、实验目的 1.观察了解PAM信号形成的过程;验证抽样定理;了解混叠效应形成的原因; 2.验证PCM编译码原理;熟悉PCM抽样时钟、编码数据和输入/输出时钟之间的关系;了 解PCM专用大规模集成电路的工作原理和应用。 二、实验内容和步骤 1.PAM编译码器系统 1.1自然抽样脉冲序列测量 (1)准备工作; (2)PAM脉冲抽样序列观察; (3)PAM脉冲抽样序列重建信号观测。 1.2平顶抽样脉冲序列测量 (1)准备工作; (2)PAM平顶抽样序列观察; (3)平顶抽样重建信号观测。 1.3信号混叠观测 (1)准备工作 (2)用示波器观测重建信号输出的波形。 2.PCM编译码器系统 2.1PCM串行接口时序观察 (1)输出时钟和帧同步时隙信号的观察; (2)抽样时钟信号与PCM编码数据测量; 2.2用示波器同时观察抽样时钟信号和编码输出数据信号端口(TP502),观测时以TP504 同步,分析掌握PCM编码输数据和抽样时钟信号(同步沿、脉冲宽度)及输出时钟的对应关系; 2.3PCM译码器输出模拟信号观测,定性观测解码信号与输入信号的关系:质量,电平, 延时。 2.4PCM频率响应测量:调整测试信号频率,定性观察解码恢复出的模拟信号电平,观测 输出信号电平相对变化随输入信号频率变化的相对关系; 2.5PCM动态范围测量:将测试信号频率固定在1000Hz,改变测试信号电平,定性观测解 码恢复出的模拟信号的质量。 三、实验数据处理与分析 1.PAM编译码器系统 (1)观察得到的抽样脉冲序列和正弦波输入信号如下所示:

上图中上方波形为输入的正弦波信号,下方为得到的抽样脉冲序列,可见抽样序列和正弦波信号基本同步。 (2)观测得到的重建信号和正弦波输入信号如下所示: 如上图所示,得到的重建信号也为正弦波,波形并没有失真。 (3)平顶抽样的脉冲序列如下所示: 上图中上方的波形为输入的正弦波信号,下方为PAM平顶抽样序列。 (4)平顶抽样的重建信号波形: 可见正弦波经过平顶抽样,最终重建的信号仍为正弦波。 (5)观察产生混叠时的重建信号的输出波形 在实验时将输入的正弦波频率调至7.5KHz,通过示波器观察得到的输入正弦波波形和输出的重建信号如下所示: 由于实验时采用的抽样频率为8KHz,所以当输入的信号频率为7.5KHz时已经不满足抽样定理的要求了,所以会产生混叠误差,导致了输出的重建波形如上图所示,不再是正弦波了。 从测量结果可以得出如下规律:随着输入正弦波信号的频率逐渐升高,输出重建波形的幅值逐渐降低。这是由于在实验电路中加入了抗混滤波器,该滤波器随着频率的升高会使处理的信号的衰减逐渐变大,所以如试验结果所示,随着输入信号频率的升高,输出信号的幅值在逐渐变小。 (7) 在不采用抗混滤波器时输入与输出波形之间的关系,得到的结果如下表所示:

《8259中断控制器实验》的实验报告

实验六8259中断控制器实验 6.1 实验目的 (1) 学习中断控制器8259的工作原理。 (2) 掌握可编程控制器8259的应用编程方法。 6.2 实验设备 PC微机一台、TD-PIT+实验系统一套。 6.3 实验内容 1. 单中断应用实验 (1)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。 (2)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“Hello”,中断5次后退出。 2.扩展多中断源实验 利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对8259控制器的IR0和IR1中断请求进行处理。 6.4 实验原理 1. 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,

实验3:外部中断实验指导书

《—嵌入式系统原理与应用—》实验指导书 黄鹏程、谢勇编写 适用专业:计算机科学与技术 物联网工程 厦门理工学院计算机与信息工程院(系) 2016 年 3 月

实验3:外部中断实验 实验学时:2 实验类型:(演示、验证√、综合、设计研究) 实验要求:(必修√、选修) 一、实验目的 1. 理解中断的概念及其在嵌入式系统中的应用; 2. 熟悉LPC1700系列CortexM3 微控制器的NVIC的配置; 3. 熟悉LPC1700系列CortexM3 微控制器外部中断的控制。 二、实验内容 在EasyARM1768开发板的硬件平台上,基于流水灯显示实验,结合向量中断控制器NVIC和外部中断,设计并实现外部中断实验。要求实现三种方式的流水灯实现,并且通过三个按键利用通过外部中断实现三种不同方式的切换。 三、实验原理、方法和手段 中断对嵌入式系统来说是很重要的一个概念,利用中断,可以开发出很接近产品的嵌入式系统。市场上大部分的不带嵌入式操作系统的嵌入式系统都采用了“前后台系统”来实现产品功能,这其中的前台就是中断机制。故我们要理解中断的概念,并且能够应用中断到实际的嵌入式系统中来。 图1 前后台系统

图2 中断处理流程示意图 1、 中断向量控制器(NVIC ) 嵌套向量中断控制器(NVIC )是 Cortex-M3 处理器的一个内部器件,它与 CPU 内核紧密耦合,共同完成对中断的响应,降低了中断延时,使得最新发生的中断可以得到高效处理。 它能够管理中断的各种事务,比如使能或禁止外设中断源的中断,设置外设中断源的优先级,挂起中断,查看外设中断源的中断触发状态等。然后把中断信号给ARM 内核。NVIC 的应用示意图如下所示: 图3 NVIC 的作用

MATLAB实验报告实验二

实验二 MATLAB矩阵及其运算 学号:3121003104 姓名:刘艳琳专业:电子信息工程1班日期:2014.9.20 一实验目的 1、掌握Matlab数据对象的特点以及数据的运算规则。 2、掌握Matlab中建立矩阵的方法以及矩阵处理的方法。 3、掌握Matlab分析的方法。 二实验环境 PC_Windows 7旗舰版、MATLAB 7.10 三实验内容 4、1. (1)新建一个.m文件,验证书本第15页例2-1; (2)用命令方式查看和保存代码中的所有变量;

(3)用命令方式删除所有变量; (4)用命令方式载入变量z。 2. 将x=[4/3 1.2345e-6]在以下格式符下输出:短格式、短格式e方式、长格式、长格式e方式、银行格式、十六进制格式、+格式。 短格式 短格式e 长格式

长格式e方式 银行格式 十六进制格式 3.计算下列表达式的值 (1)w=sqrt(2)*(1+0.34245*10^(-6)) (2)x=(2*pi*a+(b+c)/(pi+a*b*c)-exp(2))/(tan(b+c)+a) a=3.5;b=5;c=-9.8; (3)y=2*pi*a^2*((1-pi/4)*b-(0.8333-pi/4)*a) a=3.32;b=-7.9; (4)z=0.5*exp(2*t)*log(t+sqrt(1+t*t)) t=[2,1-3i;5,-0.65];

4. 已知A=[1 2 3 4 5 ;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20],对其进行如下操作:(1)输出A在[ 7, 10]范围内的全部元素; (2)取出A的第2,4行和第1,3,5列; (3)对矩阵A变换成向量B,B=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]; (4)删除A的第2,3,4行元素; (1) (2)

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1;

void timer1_init() { TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2^0; //将D1位定义为P2.0引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0;

单片机外部中断实验(附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(); } } }

NE555PWM脉宽调制电路分析与实验

NE555PWM脉宽调制电路 PWM称之为脉冲宽度调制信号,利用脉冲的宽度来调整亮度,也可用来控制DC马达。PWM脉冲宽度调制信号的基本频率至少约400HZ-10KHZ,当调整LED的明或暗时,这个基本的频率不可变动,而是改变这个频率上方波的宽度,宽度越宽则越亮、宽度越窄则越暗。PWM是控制LED的点亮时间,而不是改变输出的电压来控制亮度。 图1-5 PWM脉宽调制图片 以下为PWM工作原理: reset接脚被连接到+V,因此它对电路没有作用。 当电路通电时,Pin 2 (触发点)接脚是低电位,因为电容器C1开始放电。这开始振荡器的周期,造成第3接脚到高电位。当第3接脚到高电位时,电容器C1开始通过R1和对二极管D2充电。当在C1的电压到达+V的2/3时启动接脚6,造成输出接脚(Pin3)跟放电接脚(Pin7)成低电位。 当第3接脚到低电位,电容器C1起动通过R1和D1的放电。当在C1的电压下跌到+V的1/3以下,输出接脚(Pin3)和放电接脚(Pin7)接脚到高电位并使电路周期重复。 Pin 5并没有被外在电压作输入使用,因此它与0.01uF电容器相接。 电容器C1通过R1及二极管,二极管一边为放电一边为充电。充电和放电电阻总和是相同的,因此输出信号的周期是恒定的。工作区间仅随R1做变化。 PWM信号的整体频率在这电路上取决于R1和C1的数值。 公式:频率(Hz)= 1.44/(R1 * C1)

利用555定时器实现宽范围脉宽调制器(PWM) 脉宽调制器(PWM)常常用在开关电源(稳压)中,要使开关电源稳压范围宽(即输入电压范围大),可利用555定时器构成宽范围PWM。 仅需把一个二极管和电位计添加到异步模式运转的555定时器上,就产生了一个带有可调效率系数为1%到99%的脉宽调制器(图1)。它的应用包括高功率开关驱动的电动机速度控制。 图1:在555定时器电路中增加一个二极管和电位计可构成一个宽范围PWM。/TD> 这个电路的输出可以驱动MOSFET去控制通过电动机的电流,达到平滑控制电动机速度9 0%左右。这也应用于灯光的控制,灯光的强度可得以有效控制。 另一个应用是在开关式电源。PWM调整允许一个可变的输出电压。可通过555定时器(5个引脚)VC终端的反馈来调节电压。一个超过调节阈值限制的输出电压将提前结束基于周期

微机接口实验报告-8259中断控制器应用实验

姓名 院专业班 年月日实验内容8259中断控制器实验指导老师 【实验目的】 (1)学习中断控制器8259的工作原理。 (2)掌握可编程控制器8259的应用编程方法。 【试验设备】 PC微机一台、TD-PIT+实验系统一套。 【实验内容】 (1) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。 (2) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“9”,中断显示6次后退出。 【实验原理】 1. 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1- OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,OCW1-OCW3各命令字格式如图6-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。 图6-1 8259内部结构和引脚图

脉宽调制(PWM)的基本原理及其应用实例

脉宽调制(PWM)的基本原理及其应用实例 脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 模拟电路 模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V, 5V}这一集合中取值。 模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。 尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。 数字控制 通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。 简而言之,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。 图1显示了三种不同的PWM信号。图1a是一个占空比为10%的PWM输出,即在信号周期中,10%的时间通,其余90%的时间断。图1b和图1c显示的分别是占空比为50%和90%的PWM 输出。这三种PWM输出编码的分别是强度为满度值的10%、50%和90%的三种不同模拟信号值。例如,假设供电电源为9V,占空比为10%,则对应的是一个幅度为0.9V的模拟信号。 图2是一个可以使用PWM进行驱动的简单电路。图中使用9V电池来给一个白炽灯泡供电。如果将连接电池和灯泡的开关闭合50ms,灯泡在这段时间中将得到9V供电。如果在下一个50ms中将开关断开,灯泡得到的供电将为0V。如果在1秒钟内将此过程重复10次,灯泡将会点亮并象连接到了一个4.5V电池(9V的50%)上一样。这种情况下,占空比为50%,调制频率为10Hz。 大多数负载(无论是电感性负载还是电容性负载)需要的调制频率高于10Hz。设想一下如果灯泡先接通5秒再断开5秒,然后再接通、再断开……。占空比仍然是50%,但灯泡在头5秒钟内将点亮,在下一个5秒钟内将熄灭。要让灯泡取得4.5V电压的供电效果,通断循环周期与负载对开关状态变化的响应时间相比必须足够短。要想取得调光灯(但保持点亮)的效果,必须提高调制频率。在其他PWM应用场合也有同样的要求。通常调制频率为1kHz到200kHz之间。

北理大学计算机实验基础实验二实验报告表答案

实验二实验报告表 实验名称: 学号姓名:班级:实验时间: 实验报告表2-1 数值型数据在计算机中的二进制实验记录表 十进制整数分输入十进制整数内存整型数 据内存地址号 类 任意正整数7 0000011100000000 00010001000100 02 任意负整数-5 1111101111111111 00010003000100 04 最大数3276711111111011111111 00010005000100 06 最小数-32768000000001000000 00010007000100 08 绝对值最小数0 0000000000000000 00010009000100 0A 绝对值最大数-32768000000001000000 00010007000100 08 十进制实数分输入十进制实数内存实型数据 类 尾数部分阶码阶码的数学表示 任意正实数 2.211001100000011000100000 0 11001101 1 任意负实数-2.211001100000011001100000 0 11001101 1 最大数99.999911111111110001110100001 0 11110011 6 最小数-99.999911111111110001111100001 0 11110011 6 绝对值最小数0 00000000000000000000000 0 00000000 0 绝对值最大 数99.999911111111110001110100001 0 11110011 6 说明:本实验对计算机内存数据的存放拟定为:①整数用两个字节存储,并负数只考虑原码;②实数用 4 个字节存储,其中阶码部分占一个字节。 实验报告表2-2 其他进制数据与二进制转化实验记录表 其他进 制实验数据二进制 十进制6110 八进制7111 十六进 制 A 101 0 实验报告表2-3 数据的原码、补码和反码表示实验记录表 正十进制数113 负十进制数-103

单片机中断实验报告

实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer1_init() 开始 设置显示初值启动定时器 判断是否到59 继续 是 否

{ TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int

外部中断实验

实验二外部中断实验 一.实验目的 1.学习外部中断技术的基本使用方法; 2.学习中断处理程序的编程方法。 二.实验设备及器材配置 1.单片机仿真实验系统。 2.计算机。 3.导线。 三.实验内容 在以下实验题目中任选一个或由老师指定。 1.P1口做输出口,接八只发光二极管,编写程序,使其循环点亮。以单脉冲输出端做为中断申请,当第一次产生外部中断时,使发光二极管全亮,延时1秒后返回中断之前的状态;当第二次产生外部中断时,使发光二极管全灭,延时1秒后返回中断之前的状态;以后如上述一直循环下去。 2.以单脉冲输出端做为中断申请,自行设计连线,用实验箱上的红、绿、黄发光二极管模拟交通灯控制。当有急救车通过时,两交通灯信号为全红,以便让急救车通过,延时10秒后交通灯恢复中断前状态。 四.实验原理说明 本实验中中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能返回中断前P1口及发光二极管的状态。除了保护累加器A、程序状态字PSW外、P1口的状态外,还要注意主程序中的延时程序和中断程序的延时程序不能混用,本实验中,主程序延时程序用的寄存器和中断延时用的寄存器也不能混用。 五.连线方法及实验电路 8031的P1.0—P1.7分别接发光二极管L0—L7,P3.2接单脉冲输出端“ ” 外部中断实验电路如图1-3所示。

图1-3 外部中断实验电路 六.思考题及实验报告要求 1.思考题 (1).试说明51系列单片机外部中断如何使用。 (2).修改程序,外部中断产生时,使发光二极管闪亮移位方向改变。 2.实验报告要求 (1).给出自行设计的程序清单、程序流程图。 (2). 总结实验过程中调试所遇到的问题和解决方法,写出编程调试的经验和体会。 VW集成调试软件使用 1.自建以字母开头的文件夹,推荐在F盘。 2.双击桌面V/W快捷方式 3.左击【文件】-新建文件-保存文件(存于自建文件夹下,以字母开头,后缀为.ASM或.C) 4.左击【文件】-新建项目-(以字母开头,存于自建文件夹下,加入自存的汇编或C源程序) 5.编写程序 6. 左击【项目】-编译,根据提示将提示的错误位置修改,编译,直至程序无错。 7.实验箱断电、连线完毕后,打开实验箱电源开关。左击【仿真器】,在出现的窗口中选择LAB8000\MCS51\8031AH或A T89C51,晶体频率:6000000Hz。 8. 左击【执行】-全速运行,在实验箱上观察运行结果。

PWM的工作原理

PWM得工作原理 脉宽调制PWM就是开关型稳压电源中得术语。这就是按稳压得控制方式分类得,除了PWM型,还有PFM型与PWM、PFM混合型。脉宽宽度调制式(PWM)开关型稳压电路就是在控制电路输出频率不变得情况下,通过电压反馈调整其占空比,从而达到稳定输出电压得目得。 随着电子技术得发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用得脉宽PWM法,它就是把每一脉冲宽度均相等得脉冲列作为PWM波形,通过改变脉冲列得周期可以调频,改变脉冲得宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM得周期、PWM 得占空比而达到控制充电电流得目得。 pwm得定义 脉宽调制(PWM)就是利用微处理器得数字输出来对模拟电路进行控制得一种非常有效得技术,广泛应用在从测量、通信到功率控制与变换得许多领域中. 模拟信号得值可以连续变化,其时间与幅度得分辨率都没有限制.9V电池就就是一种模拟器件,因为它得输出电压并不精确地等于9V,而就是随时间发生变化,并可取任何实数值。与此类似,从电池吸

收得电流也不限定在一组可能得取值范围之内。模拟信号与数字信号得区别在于后者得取值通常只能属于预先确定得可能取值集合之内,例如在{0V,5V}这一集合中取值. 模拟电压与电流可直接用来进行控制,如对汽车收音机得音量进行控制。在简单得模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻得电流也随之增加或减少,从而改变了驱动扬声器得电流值,使音量相应变大或变小。与收音机一样,模拟电路得输出与输入成线性比例. 尽管模拟控制瞧起来可能直观而简单,但它并不总就是非常经济或可行得。其中一点就就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题得精密模拟电路可能非常庞大、笨重(如老式得家庭立体声设备)与昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流得乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值得大小。 通过以数字方式控制模拟电路,可以大幅度降低系统得成本与功耗.此外,许多微控制器与DSP已经在芯片上包含了PWM控制器,这使数字控制得实现变得更加容易了。 pwm得工作原理 脉冲宽度调制波通常由一列占空比不同得矩形脉冲构成,其占空比与信号得瞬时采样值成比例.图1所示为脉冲宽度调制系统得原理

实验二实验报告

Java实验二:模拟小电器 班级:软件1502班姓名:李家伟学号:20151611542 一、实验目的 借助javax.swing包提供的组件并使用命令模式模拟一个带控制开关的小电器,强化对命令模式的理解。 二、实验内容 1.请创建底面为正方形的柱形类,计算柱体体积。 2.请画出程序对应的UML类图。 三、实验环境 1、PC微机; 2、Windows 操作系统; 3、JDK程序集成环境、Eclipse。 四、UML图、源代码及测试结果 1. UML图 2. 源代码 1.Pillar类(柱体) public class Pillar { Geometry bottom;

double height; Pillar(Geometry bottom,double height){ this.bottom=bottom; this.height=height; } public double getVolume(){ return bottom.getArea()*height; } } 2.Square类(正方形面积) public class Square extends Geometry{ double a; Square(double a){ this.a=a; } public double getArea(){ return a*a; } } 3.Geometry类(接口) public abstract class Geometry { public abstract double getArea(); } 4.Application(主函数) public class Application { public static void main(String args[]){ Pillar pillar; Geometry bottom; bottom=new Square(3);

中断实验报告

沈阳工程学院 学生实验报告 实验室名称:微机原理实验室实验课程名称:微机原理及应用 实验项目名称:8259中断控制器实验实验日期:年月日 班级:姓名:学号: 指导教师:批阅教师:成绩: 一.实验目的 1.熟悉8086中断系统及8259的扩展方法。 2.理解8259中断控制器的工作原理。 3.初步掌握8259的应用编程方法。 二.实验设备 PC机一台,TD-PITE实验装置一套。 三.实验内容 1.实验原理 (1)在Intel 386EX芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器:一个为主控制器,一个为从控制器。从片的INT连接到主片的IR2信号上构成两片8259的级联。主片8259的中断请求信号IR6和IR7开放,从片的中断请求信号IR1开放,以供实验使用。 (2)单次脉冲输出与主片8259的MIR7相连,每按动一次单次脉冲开关,产生一个外部中断,在显示器上输出一个字符。 8259中断实验接线图 2.实验步骤 (1)补全实验程序,按实验接线图接线。 (2)对实验程序进行编译、链接无误后,加载到实验系统。 (3)执行程序,并按动单次脉冲开关KK1或KK2,观察程序执行结果。 3.程序清单 SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:SSTACK START: PUSH DS MOV AX, 0000H MOV DS, AX ·1·

8259中断控制实验 ·2· MOV AX, OFFSET MIR7 ①MOV SI, ( ) MOV [SI], AX MOV AX, CS ②MOV SI, ( ) MOV [SI], AX CLI POP DS MOV AL, 11H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 04H OUT 21H, AL MOV AL, 01H OUT 21H, AL MOV AL, ( ) OUT 21H, AL STI AA1: NOP JMP AA1 MIR7: STI CALL DELAY MOV AX, 0137H INT 10H MOV AX, 0120H INT 10H MOV AL, 20H OUT 20H, AL IRET DELAY: PUSH CX MOV CX, 0F00H AA0: PUSH AX POP AX LOOP AA0 POP CX RET CODE ENDS END START 四.实验结果及分析 根据实验回答下列问题: 1.按动单次脉冲输入KK1后,屏幕显示字符 。 2.分析中断矢量地址能改成别的数值吗?为什么? 3.改变接线,KK1连接MIR6。修改程序行①为 ,修改程序行②为 ,重新设置中断向量,以及中断屏蔽字改为 。 4.如果输出数字9,如何修改程序? 5.如何屏蔽MIR7上的中断请求?按下KK1会有什么现象? 6.选做:如果采用级联方式扩展一片8259从片,应如何修改程序呢?请将程序写在背面。 成绩评定 对实验原理的掌握情况 2 1 0 — 实验步骤正确性 3 2 1 0 实验数据记录正确性 2 1 0 — 实验结果及分析的正确性 3 2 1 成 绩 批阅教师: 20 年 月 日

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