单片机实验指导书(2)

2020-06-07 15:39

DDRP=0xFF; //关显示

DDRT=0xFF;

DDRB=0xff; //设置为输出 PORTB=~data; //点亮LED1 IRQ_Init(); EnableInterrupts; for(;;) {

LED_yiwei(); } }

void LED_yiwei(void){ if(flag==0){ PORTB=0xff; data=0x01; dis(1,3,0,2,2); } else { PORTB= ~data;

data=data<<1; //左移一位 if(data==0) data=0x01; dis(1,3,3,0,1); } }

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

显示函数,第一个参数是显示维持的时间,第二个到第五个参数分别是第一位到第四位显示的数字

****************************************************/ void dis(int time ,int a, int b, int c,int d) {int i;

for(i=1;i

display(3,c); display(4,d); } }

/************************************************************************ 显示函数包含位选和段选

*************************************************************************/ void display(unsigned char wei,int data) {

PTT=WeiMa[wei-1]; PTP=DisplayDecode[data]; delay_ms(10); }

/**********************中断处理******************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKED //IRQ中断 void interrupt 6 IRQ_interrupt(void) {

flag=~flag; }

#pragma CODE_SEG DEFAULT

实验三、PIT模块使用

1. PIT使用

/*---------------------------------------------------------*/ /************************************************************ 实验内容:PIT使用

实验说明:PIT是周期中断定时器(Periodic Interrupt Timer)的名称,实际上

PIT模块就是一个24位递减计数器,用作精确计时。首先给计数器设 定一个初值,每过一个总线周期,计数器进行减1操作,当计数器减 为0之后,触发中断,并再次自动载入初值。

重要设置:在工程的\文件夹下的\文件

中设置对应PIT中断的中断向量 VECTOR ADDRESS 0xFF7A PIT_INTER

实验现象:PB口的LED半秒循环亮灭。

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

#include \

#define LEDCPU PORTB #define LEDCPU_dir DDRB #define BUS_CLOCK #define OSC_CLOCK

/*************************************************************/ /* 初始化锁相环 */ /*************************************************************/ void INIT_PLL(void) {

CLKSEL &= 0x7f; //set OSCCLK as sysclk PLLCTL &= 0x8F; //Disable PLL circuit CRGINT &= 0xDF;

#if(BUS_CLOCK == 40000000) SYNR = 0x44;

#elif(BUS_CLOCK == 32000000) SYNR = 0x43;

#elif(BUS_CLOCK == 24000000) SYNR = 0x42; #endif

REFDV = 0x81; //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M

PLLCTL =PLLCTL|0x70; //Enable PLL circuit asm NOP; asm NOP;

while(!(CRGFLG&0x08)); //PLLCLK is Locked already

32000000 //总线频率 16000000 //晶振频率

CLKSEL |= 0x80; //set PLLCLK as sysclk }

/*************************************************************/ /* PIT模块初始化函数 */ /*************************************************************/ void init_PIT(){

PITMTLD0=249; //为0通道8位计数器赋值

PITLD0=63999; //为0通道16位计数器赋值 //(249+1)*(63999+1)=16000000个总线周期

PITMUX_PMUX0=0; //第0通道使用微计数器0 PITCE_PCE0=1; //第0通道计数器工作 PITCFLMT=0X80; //使能周期中断定时器 PITINTE_PINTE0=1; //0通道定时器定时中断被使能 }

#pragma CODE_SEG __NEAR_SEG NON_BANKED interrupt void PIT_INTER(void) {

if(PITTF_PTF0==1) {

PITTF_PTF0=1; LEDCPU=~LEDCPU; } }

#pragma CODE_SEG DEFAULT

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

LEDCPU_dir=0xff; init_PIT();

for(;;) { } }

EnableInterrupts;

2. PIT程序1s测试

/* 实验内容

PIT使用练习

实验说明:用中断号调试的程序 实验现象:PB口的LED每秒循环亮灭 */

#include #include \

//***********************变量定义********************* unsigned int test_pulse=0;

//************************函数申明******************** void SetBusCLK_64M(void);

void PIT_Init(void); //10ms定时设置

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

{ test_pulse=0; SetBusCLK_64M(); PIT_Init(); DDRB=0xff; PORTB=0xff; EnableInterrupts; for(;;) {

} //等待中断的到来 }

//***********************锁相环初始化***********************


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

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

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

马上注册会员

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