日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

protues仿真器51单片机定时器内部定时方式

發布時間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 protues仿真器51单片机定时器内部定时方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

protues仿真器51單片機定時器內部定時方式

項目場景:

在寫程序時,用定時器0和定時器1發現定時器定時時間不一樣

問題描述:

用定時器0寫的延時函數(定時器)

void delay_ms(uint xms) {for(; xms > 0; xms--) {TL1=0x18;TH1=0xfc;while(TF1==0);TF1=0; //清零} }

用定時器1寫的延時函數(定時器)

void delay_ms(uint xms) {for(; xms > 0; xms--) {TL0=0x18;TH0=0xfc;while(TF0==0);TF0=0; //清零} }

兩者調用定時器運行的情況時間完全不一樣


原因分析:

初步懷疑是protues中51單片機內部定時器0和定時器1用的是兩種計數方式,即加法計數和減法計數。

解決方案:

完整代碼:

/******************************* ******************************** ******實驗名稱:定時器實驗****** *******定時器時間為:1000us****** **********使用定時器T0********** *********@author:小高*********** ********date:2021.10.11 ********* ******************************** *******************************/#include <reg51.h>#define uint unsigned int void delay_ms(uint xms) //延時函數 {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() //初始化函數 {TMOD=0x01; //工作模式1TL1=0x18; //初始化TH1=0xfc; //初始化TR1=1; //打開定時器P1 = 0x01;P2 = 0x80; }void main() {allInit();while(1) {ledBr();} }

protues模擬圖如下:

總結

以上是生活随笔為你收集整理的protues仿真器51单片机定时器内部定时方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。