单片机实验指导书(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(;;) { } //等待中断的到来 } //***********************锁相环初始化*********************** 共5页: 上一页12345下一页 单片机实验指导书(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决! 下载这篇word文档