使用timer4做一个1K的定时器中断。
timer.c
void timer4_init()
{
TIM4_IER = 0x00; //禁止中断
TIM4_EGR = 0x01; //允许产生更新事件
TIM4_PSCR = 0x06; //计数器时钟=主时钟/2^TIM4_PSCR=16M/2^6==>16us
TIM4_ARR = 249; //设定重装载时寄存器值
TIM4_CNTR = 0; //设定计数器的初值
//定时周期=(ARR+1)*64=1ms
TIM4_CR1 = 0x01; //b0=1,允许计数器工作; b1=0,允许更新
TIM4_IER = 0x01; //允许更新中断
}
stm8_interrupt_vector.c中添加:
/* Timer4更新中断服务程序 */
@far @interrupt void TIM4_UPD_OVF_IRQHandler( void )
{
static unsigned int ii = 0;
if ( ii & gt; 30000 )
ii = 1;
else
ii++;
if ( ii % 1000 == 0 )
read_adc( ADC_Channel3 );
TIM4_SR = 0x00; /* 清除更新标志 */
PA_ODR = PA_ODR ^ (1 & lt; < 3); /* PA3取反 */
TIM4_CNTR = 0; /* 置0 */
return;
}
这里实现了两个功能,一个是每秒读一次ADC同时发送到串口,另一个是为PA3反复置位,以便用示波器检测中断频率是不是1K。当然,中断函数中海需要添加:
{0x82, TIM4_UPD_OVF_IRQHandler}, /* irq23 */
还有就是系统时钟默认在启动后会8分频,所以还要对时钟初始化:
void clk_init()
{
CLK_CKDIVR = 0x00; //fcpu
}
关键字:STM8S103 定时中断 初始化
引用地址:
STM8S103定时中断初始化
推荐阅读最新更新时间:2024-11-12 14:25
stm32中定时器中断的套路
首先要提到的是,在stm32中,定时器相关的库函数主要集中在固件库文件 stm32f10x_tim.h 和 stm32f10x_tim.c 文件中,所以在进行定时器方面的处理时,需要加载这两个文件进来。在进行定时器操作时,一般按如下步骤来进行: 1、打开相关外设的时钟。以定时器TIM3为例,由stm32的时钟树可以看到,TIM3时钟挂接在APB1上面,所以打开TIM3时钟时使用RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE),如果其中还使用到了其他外设,如GPIO等,再打开相关的外设时钟就可以了。 2、清除中断挂起位。由于各种不可知的因素作用,在程序运行前要操
[单片机]
芯海单片机定时中断
;============================================ ; filename: 定时器.asm ; chip : csu1181b ; author : ; date : 2012-08-14 ;============================================ include csu1181b.inc ;============================================ ; program start ;============================================ org 000h GOTO A
[单片机]
MSP430用按键中断控制定时器产生持续 1s 的周期信号
////////////////////////////////////////////////////////////////////////////////////////////////////// // 2012 年吉林省大学生电子设计大赛 C题 声源定位系统 ----(声源部分) // 要求: 有信号产生电路, 放大电路, 声音频率 800Hz 左右, 按一次键响声持续 1 秒. // 声源模块体积不超过 4cm*4cm*4cm. //==========================================================================================
[单片机]
51单片机——定时计数器中断
先写IE寄存器中断允许寄存器,再写中断处理函数就行 定时模式下触发一次中断后TH和TL的值会默认复位为0,需要在中断服务函数里重新设定初值。 例 void timer0() interrupt 1 { TH0 = 0x4b; TL0 = 0xfd; } 应用 数码管动态扫描,按键按下也能继续执行扫描
[单片机]
STM32填坑:时钟使能必须在外设初始化之前
最近在STM32上写了一份串口通信的程序,但下载复位后串口却不能工作,初始化的代码如下: //发送/接收的GPIO、串口和中断的初始化结构体 GPIO_InitTypeDef GPIO_InitStructureTx; GPIO_InitTypeDef GPIO_InitStructureRx; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //设置发送和接收引脚 GPIO_InitStructureTx.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructureRx.GPIO_Pin = GP
[单片机]
TQ2440国嵌学院gboot-时钟初始化
TQ2440国嵌学院gboot-时钟初始化: 1:设置lock time寄存器 2:设置分频系数(FCLK:HCLK:PCLK) 3:设定CPU到异步模式(通常FCLK不等于HCLK) 4:设置FCLK 首先了解下CPU的时钟分类: 同样在S3C2440中找到CLOCK第7章这一章如下: 从上面的文字中,可以得到FCLK主要是CPU核的工作时钟,HCLK是AHB总线(LCD,DMA)的工作时钟,PCLK是APB总线(UART,GPIO)工作时钟。 下面是CPU内部时钟电路结构图 其次是CPU的启动时钟时序: 从上图可以看出,在上电后,nRESET会拉高,clock开始起振输出时钟信号,
[单片机]
Part10-C语言环境初始化-一跃进入C大门lesson3
1、跳转到c代码 因为内存中的代码来自于垫脚石SRAM,他们是相同的。 采用绝对跳转方式来完成。 因为我们是从汇编代码跳转到c语言的程序,所以我们要提前准备一个main.c文件。 修改makefile 2、验证看跳转成功没有 使用c语言来点亮led 汇编中的led点亮 在c语言当中地址一定要有类型的故
[单片机]
STM8S103编译出错 bad struct/union operand
STM8s103P 编译出现以下结果 bad struct/union operand 是由于未宏定义芯片类型 解决方法一 在project setting里面 C Compiler 更改 Preprocessor Definitions 方法二 更改stm8s.h 将下面的 /* #define STM8S208 */ /*! STM8S High density devices with CAN */ /* #define STM8S207 */ /*! STM8S High density devices without CAN */ /* #define STM8AF52Ax */ /
[单片机]