找回密码
 注册
查看: 421|回复: 2
打印 上一主题 下一主题

这个count在代码里起什么作用?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-1 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用7 S; E' h* a" q# J7 ^8 w) t, F

8 N. ^5 M5 a6 w/ {#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
& q  G. n4 ]' O4 l+ Y3 i/ D, X" b& q4 F4 t# z# q, v
typedef unsigned int u16;          //对数据类型进行声明定义2 L# }9 Z% J+ K# M7 n* G  l
typedef unsigned char u8;" u$ P' y) C6 `

" M7 F# O0 G: K) j5 Y//--定义使用的IO口--//
+ [7 S2 {2 \9 ?: Y4 R***it PWM=P2^1;
. v  A7 K# p0 w  x' e6 G! x9 Ibit DIR;9 N# W0 o2 Y8 ^; `/ {
. X( W2 T' g, h0 E0 y
//--定义一个全局变量--//   C( c& p+ W: v  R) X; V
u16 count,value,timer1;1 \2 J9 R. {( l

6 i4 `$ Y1 p0 Q4 [, }1 L% Z! s/*******************************************************************************
9 N" r9 d! P" I$ X* A: `* 函 数 名         : Timer1Init
; [" G4 O9 |( F7 J  n- q* 函数功能                   : 定时器1初始化
1 X/ H$ m9 {4 t8 T+ C  |# N* 输    入         : 无! M. V0 y/ f; f5 t& N& m* K9 x& r
* 输    出         : 无# w% @4 S7 C( m5 ~
*******************************************************************************/( L: K" r* o/ j" R
void Timer1Init()/ t( Z# E! B1 A+ o
{
7 q; N$ |$ D' S! |' `) e( S        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。3 H: m2 c* @, w  L$ f
! ~' ^" ~9 ^- @: D
        TH1 = 0xFF;
4 l5 S/ _$ x# v$ b. H' w        TL1 = 0xff;   //1us1 w( ~* P) ^' `6 S/ E
               
& ^0 U& H! g: g# z* d! y        ET1=1;//打开定时器1中断允许& e1 L9 B4 Q2 n6 v" Y
        EA=1;//打开总中断8 R1 e6 Y. V. Z7 e
        TR1=1;//打开定时器                        
8 w: V& {  R7 o: L9 N0 u7 i}) M9 j" Z1 O) g7 e
/*******************************************************************************2 o+ N  ^% z% p) g) ^: |% J7 `, b
* 函 数 名       : main$ ]' i9 P( S( r+ g
* 函数功能                 : 主函数) k; o" ~: \0 z
* 输    入       : 无
7 R( `6 j' r  I4 t2 t% u( a4 _* 输    出             : 无
6 K, [0 a( O- [/ O) N4 X6 B*******************************************************************************/
/ M4 G$ W: r& U4 m. E% K3 nvoid main()
3 g& ^+ a6 q. G4 B{        : R; }) w9 w$ c. k# I$ I8 ^
        Timer1Init();  //定时器1初始化
0 h/ C$ ?- g. d        while(1)
( G( g8 d$ y# J1 z        {
# N5 i5 K# ?/ U9 K9 h, E0 z                if(count>100)                                                        
9 g8 {$ a0 L+ S$ k8 ?                {  7 T8 @" [, m( G" @/ a$ g
                        count=0;8 u) _! K! {) ?- V8 ~) c
                        if(DIR==1)                                           //DIR控制增加或减小4 o# R* w' |: j! Z& F, I
                        {1 i$ p! ]+ T2 N1 C1 o+ r. M! R$ |
                          value++;6 m  y9 y0 ~4 b
                        }                        4 Z% z: R8 |. d7 m% r
                        if(DIR==0)0 Y4 o: }# y& |: C% _
                        {- m3 x, A0 ~- ]' R; }2 t' J
                          value--;
, C6 N& R3 [2 a                        }
! E2 o5 y- S  j                                
( P7 X) x& w  J8 d% `* H9 [( n+ j                }# |8 O3 N. `  S$ h2 V! @
, z4 `) u; X/ B4 v4 _8 p4 a# Z
                if(value==1000)
9 {$ g+ ?$ L( `% B* K. z                {
7 a& e* g$ p- ]" n" C+ D                  DIR=0;! g& Y( U8 m( b+ S, c& d0 F
                }
# n2 }0 z% r; ^0 N. _" S4 g1 h/ o                if(value==0)  ^) F! b/ D* `* p, l2 P/ v
                {# U8 W6 U8 ?+ n
                  DIR=1;! ^! o" R. g* V0 O
                }        
2 y! ^7 U% u' h+ o                                1 o, x2 u. M9 a4 ~3 k  c5 L% F8 d
                if(timer1>1000)  //PWM周期为1000*1us" z8 x! k+ Z, T2 ^4 W( t' g' g- u
                {
, h5 D& n1 e( e: t4 u) }2 @2 g                        timer1=0;
3 I7 \$ U. W. p% W) f  L                }* ]# M7 ]9 P6 g3 F; k2 M
                if(timer1 " ?/ w( F. P$ I3 E
                {% {! r( m4 C/ L% f+ K
                        PWM=1;
; r1 L, a+ ^6 A8 I9 m                }
) i3 E/ p- I% Y9 J8 u                else
$ w9 K$ Y+ u# c: H  j                {
, A% e- i; L/ p# V8 b& e9 S  V! V( z                        PWM=0;  t4 P/ x. j: [
                }                1 @$ \% H% }; U& N! _: c
        }                $ t6 d/ t- u1 @
}
( I! K" v" o/ a4 E7 q/*******************************************************************************5 K7 S; m5 m; X( Q) M
* 函 数 名       : Time1: {3 K9 w& Q6 Q; j; {$ c
* 函数功能                 : 定时器1的中断函数5 @+ K+ `. _" N9 X( t& u
* 输    入       : 无& L2 A8 a9 `, R3 L: B4 o4 a
* 输    出       : 无% p# e9 I' \/ [0 y* S6 u/ k" E! w8 R
*******************************************************************************/
$ K, ]! |6 V" ^1 Y! Xvoid Time1(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断
! U, Z/ I0 T) S+ o2 v6 C" B. V/ J& n{0 v1 r5 D3 t8 ~0 ]. ?
        TH1 = 0xFF;
9 T& B# x' [: F        TL1 = 0xff;   //1us. w4 I) |7 e$ z4 m3 B9 Y% ~
        timer1++;
; A* H# T4 B0 Q  z0 {8 ~    count++;% w( S; z  c9 N6 _( l
}
$ b! B$ G) H5 l7 I

该用户从未签到

2#
发表于 2022-11-1 13:38 | 只看该作者
定时器1如果定时周期为1us,那么COUNT决定每100us value值变化一次。

该用户从未签到

3#
发表于 2022-11-1 14:04 | 只看该作者
这个和时钟周期,机器周期有关的,计算时间用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-31 09:43 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表