第七集定时器部分,软件可以直接生成定时代码,这个非常方便。就是课后作业功德箱现在没办法完成,等到申请的实验箱到了以后再做吧。
利用中断3秒闪一次灯的代码 #include "ai8051u.h"
#include "stc32_stc8_usb.h"//usb 库文件,和那个stc_usb_cdc_32.LIB文件都是USB库文件,搞那个USB不停电下载时加的
#include "intrins.h" #define u8 unsigned char //8位无符号变量(0-255)
#define u16 unsigned int //16位无符号变量(0-65535) char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; void Delay20ms(void) //@24.000MHz
{
unsigned long edata i; _nop_();_nop_();i = 119998UL;while (i) i--;} u8 state=0;
u8 count=0; void Timer0_Init(void) //3秒@24.000MHz
{
TM0PS = 0x5B; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x3F; //设置定时初始值
TH0 = 0x01; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
} void main(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度 P0M1 = 0x00; P0M0 = 0xff; //设置为推挽输出P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口usb_init(); //USB CDC 接口配置Timer0_Init(); //定时器初始化IE2|=0x80; //使能USB中断EA = 1; //开总中断吗?while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置P40=0; //打开LED灯的总开关while (1){ if (bUsbOutReady) //如果接收到了数据 { //USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试) usb_OUT_done(); } //这里面写代码 if(P33==0) { Delay20ms(); if(P33==0) { printf("count=;%d\r\n",count); while(P33==0); } }}} void Timer0_Isr(void) interrupt 1 //3秒中断执行一次
{
state=!state;
P00=state;
count++;
}
|