找回密码
 立即注册
楼主: 一点痕迹

AI8051U学习打卡

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-25 23:17:08
已绑定手机

1

主题

10

回帖

65

积分

注册会员

积分
65
发表于 2024-12-20 19:27:02 | 显示全部楼层

第七课 课后练习作业

#include "ai8051u.h"
#include <intrins.h>
#include "stc32_stc8_usb.h"



char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

unsigned char LED = 0;		//LED变量
unsigned char GD1 = 0;      //功德计数



//设置定时器2为1秒溢出
void Timer2_Init(void)		//1秒@24.000MHz
{
	TM2PS = 0x1E;			//设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
	AUXR &= 0xFB;			//定时器时钟12T模式
	T2L = 0xFC;				//设置定时初始值
	T2H = 0x03;				//设置定时初始值
	AUXR |= 0x10;			//定时器2开始计时
	IE2 |= 0x04;			//使能定时器2中断
}

//设置定时器3为2秒溢出
void Timer3_Init(void)		//2秒@24.000MHz
{
	TM3PS = 0x3D;			//设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
	T4T3M &= 0xFD;			//定时器时钟12T模式
	T3L = 0xFC;				//设置定时初始值
	T3H = 0x03;				//设置定时初始值
	T4T3M |= 0x08;			//定时器3开始计时
	IE2 |= 0x20;			//使能定时器3中断
}



void main(void)
{

	WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

	 P_SW2 |= 0x80;
  
    P0M1 = 0x00;   P0M0 = 0x00;
    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 接口配置

    EA = 1;

	P40 = 0;    //LED 总开关

	    while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置

    while(1)
    {
	
	
	
		 if ( P32 == 0 )
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
			printf("功德+1: %u 次\r\n ",(unsigned int)(GD1));
			GD1 ++;
            usb_OUT_done();
			LED = 0;						//点亮LED
			P00 = LED;
			P01 = LED;
			P02 = LED;
			P03 = LED;
			P04 = LED;
			P05 = LED;
			P06 = LED;
			P07 = LED;	
		    Timer2_Init(); 				//定时器2初始化
			while( P32 == 0 )
			{
			}
        }
	
		if ( P33 == 0 )
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
			printf("功德+2: %u 次\r\n ",(unsigned int)(GD1));
			GD1 += 2;
            usb_OUT_done();	
			LED = 0;						//点亮LED
			P00 = LED;
			P01 = LED;
			P02 = LED;
			P03 = LED;
			P04 = LED;
			P05 = LED;
			P06 = LED;
			P07 = LED;
			Timer3_Init();               //初始化定时器3
			while( P33 == 0 )
			{
			}
        }
    }
}


//定时器2中断函数 1秒关闭LED
void Timer2_Isr(void) interrupt 12
{
	LED = 1;
	P00 = LED;
	P01 = LED;
	P02 = LED;
	P03 = LED;
	P04 = LED;
	P05 = LED;
	P06 = LED;
	P07 = LED;
	AUXR &= ~0x10;    //暂停定时器2
}

//定时器3中断函数 2秒关闭LED
void Timer3_Isr(void) interrupt 19
{
	LED = 1;
	P00 = LED;
	P01 = LED;
	P02 = LED;
	P03 = LED;
	P04 = LED;
	P05 = LED;
	P06 = LED;
	P07 = LED;
	T4T3M &= ~0x08;	//暂停定时器3
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-25 23:17:08
已绑定手机

1

主题

10

回帖

65

积分

注册会员

积分
65
发表于 2024-12-20 19:32:37 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=132676&ptid=12568][color=#999999]一点痕迹 发表于 2024-12-20 19:27[/color][/url][/size] 第七课 课后练习作业 #include "ai8051u.h" #include <intrins.h> [/quote]

bug修改

        USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
		printf("功德+1: %u 次\r\n ",(unsigned int)(GD1));
                GD1 ++;
         usb_OUT_done();

改为 解决串口输出延迟一次按键计数的bug

        USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
		GD1 ++;
		printf("功德+1: %u 次\r\n ",(unsigned int)(GD1));
        usb_OUT_done();
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 09:27 , Processed in 0.118163 second(s), 50 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表