assass123 发表于 2024-12-22 19:31:42

<h1>打卡第十五集:外部中断</h1>
<p><img src="data/attachment/forum/202412/22/192056o5404kftkyvfmlnv.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/22/192332ozzg0t8gnttg6a66.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/22/192453zuhuh1fqzhahdhhe.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/22/192549q8ydf47aukue844d.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/22/192641x07iwfel27l7wlcz.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/22/192809gk0lclze7kleasia.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/22/192920ydu5ffuzq7aamsif.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/22/193051ztxtnnqq92mqq2na.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/22/193123zriofif4vcrcuizq.png" alt="image.png" title="image.png" /></p>

assass123 发表于 2024-12-22 19:42:57

<p>#ifndef __EXIT_H<br />
<strong>#define __EXIT_H</strong></p>
<p>#include &quot;COMM/stc.h&quot;                //调用头文件<br />
#include &quot;COMM/usb.h&quot;</p>
<p>//------------------------------变量声明------------------------------</p>
<p>//------------------------------函数声明------------------------------<br />
void INT0_Init(void);                                //外部中断0的初始化</p>
<p>#endif</p>
<p><strong>exit.C</strong></p>
<p>#include &quot;exit.h&quot;</p>
<p>//========================================================================<br />
// 函数名称: INT0_Init<br />
// 函数功能: 外部中断0初始化<br />
// 入口参数: 无<br />
// 函数返回: 去<br />
// 当前版本: VER1.0<br />
// 修改日期: 2023<br />
// 当前作者:<br />
// 其他备注:<br />
//========================================================================</p>
<p>void INT0_Init(void)                                //外部中断0的初始化<br />
{<br />
IT0 = 1;                                                //1:下降沿中断   0:上升下降沿中断<br />
EX0 = 1;                                                //允许中断<br />
IE0 = 0;                                                //清除中断标志位<br />
}</p>
<p>#ifndef __<strong>TIM0_H</strong><br />
#define __TIM0_H</p>
<p>#include &quot;COMM/stc.h&quot;                        //调用头文件<br />
#include &quot;COMM/usb.h&quot;</p>
<p>//------------------------------函数声明------------------------------<br />
void Timer0_Init(void);                        //1毫秒@24.000MHz</p>
<p>#endif</p>
<p><strong>tim0.C</strong></p>
<p>#include &quot;tim0.h&quot;</p>
<p>//========================================================================<br />
// 函数名称: Timer0_Init<br />
// 函数功能: 定时器0初始化<br />
// 入口参数: 无<br />
// 函数返回: 无<br />
// 当前版本: VER1.0<br />
// 修改日期: 2023<br />
// 当前作者:<br />
// 其他备注:<br />
//========================================================================<br />
void Timer0_Init(void)                //1毫秒@24.000MHz<br />
{<br />
AUXR &amp;= 0x7F;                        //定时器时钟12T模式<br />
TMOD &amp;= 0xF0;                        //设置定时器模式<br />
TL0 = 0x30;                                //设置定时初始值<br />
TH0 = 0xF8;                                //设置定时初始值<br />
TF0 = 0;                                //清除TF0标志<br />
TR0 = 1;                                //定时器0开始计时<br />
ET0 = 1;                                //使能定时器0中断<br />
}</p>
<p><strong>Demo.C</strong></p>
<p>#include &quot;COMM/stc.h&quot;                //调用头文件<br />
#include &quot;COMM/usb.h&quot;<br />
#include &quot;seg_led.h&quot;<br />
#include &quot;key.h&quot;<br />
#include &quot;beep.h&quot;<br />
#include &quot;tim0.h&quot;<br />
#include &quot;exit.h&quot;</p>
<p>#define MAIN_Fosc 24000000UL        //定义主时钟</p>
<p>char *USER_DEVICEDESC = NULL;<br />
char *USER_PRODUCTDESC = NULL;<br />
char *USER_STCISPCMD = &quot;@STCISP#&quot;;</p>
<p>bitTIM_10MS_Flag;                        //10ms的标志位</p>
<p>void sys_init();        //函数声明<br />
void delay_ms(u16 ms);        //unsigned int</p>
<p>void main()                                        //程序开始运行的入口<br />
{<br />
u8 i;<br />
u8 KEY_NUM = 0;                        //保存矩阵按键的键码<br />
u8 KEY_Str = 0;                        //表示当前输入了几个密码位</p>
<pre><code>sys_init();                                //USB功能+IO口初始化
usb_init();                                //usb库初始化

Timer0_Init();                        //定时器0初始化
INT0_Init();                        //外部中断0初始化

EA = 1;                                        //CPU开放中断,打开总中断。

SEG0 = 0;
SEG1 = 0;


LED = 0xff;                                //初始状态熄灭所有LED

while(1)                //死循环
{
        if( DeviceState != DEVSTATE_CONFIGURED )         //
                continue;
        if( bUsbOutReady )                                                       
        {
                usb_OUT_done();
        }


        for(i=0;i&lt;8;i++)                //循环八次
        {
                LED = ~(1&lt;&lt;i);                //当前i是几,就点亮第几个LED
                delay_ms(500);                //验收500ms
        }
        if( P33 ==0 )                        //如果P33按下了
                SEG1 += 1;                        //数码管1的数值+1

}
</code></pre>
<p>}</p>
<p>void INT0_Isr(void) interrupt 0<br />
{<br />
SEG0 += 1;                                        //数码管0的数值+1<br />
}</p>
<p>void Timer0_Isr(void) interrupt 1<br />
{<br />
static timcount = 0;</p>
<pre><code>SEG_LED_Show();                        //数码管刷新的

timcount++;                                //1ms+1
if( timcount&gt;=10 )                //如果这个变量大于等于10,10ms计数到达
{
        timcount = 0;
        TIM_10MS_Flag = 1;        //10ms时间到了
}
</code></pre>
<p>}</p>
<p>void sys_init()                //函数定义<br />
{<br />
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快<br />
EAXFR = 1; //扩展寄存器(XFR)访问使能<br />
CKCON = 0; //提高访问XRAM速度</p>
<pre><code>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;   //设置为准双向口

P3M0 = 0x00;
P3M1 = 0x00;

P3M0 &amp;= ~0x03;
P3M1 |= 0x03;

//设置USB使用的时钟源
IRC48MCR = 0x80;    //使能内部48M高速IRC
while (!(IRC48MCR &amp; 0x01));//等待时钟稳定

USBCLK = 0x00;        //使用CDC功能需要使用这两行,HID功能禁用这两行。
USBCON = 0x90;
</code></pre>
<p>}</p>
<p>void delay_ms(u16 ms)        //unsigned int<br />
{<br />
u16 i;<br />
do<br />
{<br />
i = MAIN_Fosc/6000;<br />
while(--i);<br />
}while(--ms);<br />
}</p>

assass123 发表于 2025-2-20 20:48:07

收到厂家的试验箱,制作精巧,功能多,传输线质量好。可以开始软件编程了
页: 1 2 3 [4]
查看完整版本: 学习《32位8051单片机原理及应用》课程——32G12K128-实验箱-V9.6