ZXC-0168 STC8A8K64D4单片机 第14讲 继电器控制单路闪烁输出(定时器方式)
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
*********************************************************************/
/*************功能说明 **************
第14讲 继电器控制单路闪烁输出(定时器方式)
1.使用定时器0,设置定时1秒周期的时间,控制继电器循环通断。
******************************************/
#include "STC8A8K64D4.h" //包含此头文件后,里面声明的寄存器不需要再手动输入,避免重复定义
#include "intrins.h" //一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用。
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int//宏定义无符号整型
/************* 本地常量声明 **************/
/************* 光耦隔离输入口 **************/
sbit IN1= P5^5;//光耦隔离输入口1
sbit IN2= P4^0;//光耦隔离输入口2
sbit IN3= P6^4;//光耦隔离输入口3
sbit IN4= P6^5;//光耦隔离输入口4
sbit IN5= P6^6;//光耦隔离输入口5
sbit IN6= P6^7;//光耦隔离输入口6
sbit IN7= P3^2;//光耦隔离输入口7
sbit IN8= P3^3;//光耦隔离输入口8
sbit IN9= P3^4;//光耦隔离输入口9
sbit IN10= P3^5;//光耦隔离输入口10
/************* 光耦隔离继电器输出口 **************/
sbit OUT1= P4^3;//继电器输出口1
sbit OUT2= P2^7;//继电器输出口2
sbit OUT3= P2^6;//继电器输出口3
sbit OUT4= P2^5;//继电器输出口4
sbit OUT5= P2^4;//继电器输出口5
sbit OUT6= P2^3;//继电器输出口6
sbit OUT7= P2^2;//继电器输出口7
sbit OUT8= P2^1;//继电器输出口8
sbit OUT9= P4^2;//继电器输出口9
sbit OUT10= P2^0;//继电器输出口10
sbit RUN= P4^4;//运行状态指示灯
sbit FMQ= P0^7;//蜂鸣器控制脚
uint tcnt=0;// 定时计数器
//========================================================================
// 函数声明
void Timer0_Init();//定时器0初始化函数
//========================================================================
/************************ 定时器函数 ****************************/
void Timer0_Init()//定时器0初始化函数
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x33; //设置定时初始值
TH0 = 0xF5; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //启动定时器0
ET0=1; //使能INT0中断
EA = 1; //打开总中断中断允许控制寄存器
}
//========================================================================
// 函数: void main(void)
// 描述: 主函数。
// 参数: none.
// 返回: none.
//========================================================================
void main()//主函数
{
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; //设置为准双向口
RUN=0; //运行指示灯亮
Timer0_Init();//定时器0初始化函数
while (1)//主函数执行循环扫描
{
}
}
/********************************************************************
主程序结束
*********************************************************************/
/********************************************************************
定时器中断函数
*********************************************************************/
void Timer0_Isr() interrupt 1 //250微秒@11.0592MHz
{
tcnt++;//每中断一次计数值加1
if(tcnt==4000){OUT1=!OUT1;tcnt=0;}//如果定时器计数值等于4000 也是就1秒时间的时候,输出继电器输出状态取反
}
/********************************************************************
结束
*********************************************************************/
定时器250ms 计数4000次是1秒吗?不应该是计数4次吗?
马永锋 发表于 2023-11-21 17:42
定时器250ms 计数4000次是1秒吗?不应该是计数4次吗?
设定的定时器是250微秒 zhangxinchun 发表于 2023-11-23 12:44
设定的定时器是250微秒
我看错啦{:4_167:} 本帖最后由 欢迎哈哈哈3 于 2024-6-12 20:55 编辑
问下,这个程序为什么没有自己设置主时钟信号呢?
页:
[1]