protues仿真器51单片机定时器内部定时方式
生活随笔
收集整理的這篇文章主要介紹了
protues仿真器51单片机定时器内部定时方式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
protues仿真器51單片機(jī)定時(shí)器內(nèi)部定時(shí)方式
項(xiàng)目場(chǎng)景:
在寫程序時(shí),用定時(shí)器0和定時(shí)器1發(fā)現(xiàn)定時(shí)器定時(shí)時(shí)間不一樣
問題描述:
用定時(shí)器0寫的延時(shí)函數(shù)(定時(shí)器)
void delay_ms(uint xms) {for(; xms > 0; xms--) {TL1=0x18;TH1=0xfc;while(TF1==0);TF1=0; //清零} }用定時(shí)器1寫的延時(shí)函數(shù)(定時(shí)器)
void delay_ms(uint xms) {for(; xms > 0; xms--) {TL0=0x18;TH0=0xfc;while(TF0==0);TF0=0; //清零} }兩者調(diào)用定時(shí)器運(yùn)行的情況時(shí)間完全不一樣
原因分析:
初步懷疑是protues中51單片機(jī)內(nèi)部定時(shí)器0和定時(shí)器1用的是兩種計(jì)數(shù)方式,即加法計(jì)數(shù)和減法計(jì)數(shù)。
解決方案:
完整代碼:
/******************************* ******************************** ******實(shí)驗(yàn)名稱:定時(shí)器實(shí)驗(yàn)****** *******定時(shí)器時(shí)間為:1000us****** **********使用定時(shí)器T0********** *********@author:小高*********** ********date:2021.10.11 ********* ******************************** *******************************/#include <reg51.h>#define uint unsigned int void delay_ms(uint xms) //延時(shí)函數(shù) {for(; xms > 0; xms--) {TL1=0x18; //(65536-1000)/256晶振12mhzTH1=0xfc; //(65536-1000)%256while(TF1==0);TF1=0; //清零} }void ledBr() {delay_ms(360);P1 = (P1<<1|P1>>7);P2 = (P2<<7|P2>>1); }void allInit() //初始化函數(shù) {TMOD=0x01; //工作模式1TL1=0x18; //初始化TH1=0xfc; //初始化TR1=1; //打開定時(shí)器P1 = 0x01;P2 = 0x80; }void main() {allInit();while(1) {ledBr();} }protues模擬圖如下:
總結(jié)
以上是生活随笔為你收集整理的protues仿真器51单片机定时器内部定时方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell除法计算
- 下一篇: [Oracle]使用滚动游标