找回密码
 注册
关于网站域名变更的通知
查看: 439|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用2 j4 i3 V. {* T& s4 [- \. \6 }
& q6 y1 B6 d3 j9 F3 C* @8 e
#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器  e4 O% @6 e$ w- A/ ^8 B, t) w

( y, ?* u6 _" etypedef unsigned int u16;          //对数据类型进行声明定义
; p3 {- P1 t3 x. r7 ]# Btypedef unsigned char u8;
! R. k1 v# I5 z# V% {
0 q1 ]( G( p$ O* m) ?6 k//--定义使用的IO口--//5 g, o3 P6 b, Z4 V) j$ \
***it PWM=P2^1;# j" S9 l; J( @$ P# {
bit DIR;
) [9 `2 C- ?! Q: ?& M" j
$ X5 M5 e, P! @0 P' L6 G; ~0 ]//--定义一个全局变量--//
1 I$ G8 t& c4 B/ s/ `7 gu16 count,value,timer1;# M$ r, d+ i4 o" l7 w
; x2 {" N' Q5 ]  s' _* E! V
/*******************************************************************************
% G. ?2 p1 F" W+ ~3 Z; p; ]* 函 数 名         : Timer1Init
, S" Y  u4 }2 {$ E* 函数功能                   : 定时器1初始化4 y( N& m3 q0 X) a( S
* 输    入         : 无
0 e5 K5 P1 s& y, Q0 F* 输    出         : 无2 `2 `1 G8 w0 K) J% E, a
*******************************************************************************/
6 U+ o' `9 b; D: B; w3 y1 F' Y5 qvoid Timer1Init()1 C  K# L3 u! V2 }7 X
{
/ r1 K. _8 E6 d1 L        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。  C/ Z/ v& j2 S

+ q5 ?- j3 n; ?1 K3 u! U        TH1 = 0xFF; 9 O5 X, z& K' P4 b3 p
        TL1 = 0xff;   //1us# t+ n/ k. Q+ [$ a
               
! `. O6 S# ~; I; I3 L% s8 O        ET1=1;//打开定时器1中断允许8 z9 U  O- {: `' M# q( c
        EA=1;//打开总中断
  Q% O3 W- Z6 r  a/ n7 p' j        TR1=1;//打开定时器                        
6 H# w: M# f" S, H}
( m2 b5 O0 L# ]7 y0 ]; r) J1 z/*******************************************************************************! c# O- [8 ^1 _4 J9 j2 M- X
* 函 数 名       : main& g4 S2 k8 \" N: J( p
* 函数功能                 : 主函数: I% a# n8 G5 c
* 输    入       : 无
1 N! P; D: d9 e+ h7 H  I( n* 输    出             : 无' k7 x. [  n8 i) K. I
*******************************************************************************/' K) C* v/ j8 ~9 q4 j, i' b- {
void main()9 R# n* ?9 P$ u# G6 ]" b0 H
{        ; R6 D/ ]9 l' C" O3 q( Y. [
        Timer1Init();  //定时器1初始化3 h5 {- p, ]- l2 W
        while(1)
; F1 C$ r6 R4 V" n: y        {
9 n8 C3 _( Z8 h6 g) `                if(count>100)                                                        ! ~% n7 B' s0 `- t
                {  
* N" Q: b* q0 W  I                        count=0;. h* z& g+ P. q# c; o1 n
                        if(DIR==1)                                           //DIR控制增加或减小
' E' l4 K& ^. _7 q. M& f                        {7 d! u5 P5 _9 ]* u! M' G, ~+ S5 x
                          value++;
9 X1 r: j* x, G4 y) e- X                        }                        
) [: V( \- U) W; A" K+ ?+ h) s5 a                        if(DIR==0)( n# y( K! V7 E- O- ^8 S/ K
                        {( j2 m: z/ X, C8 K* p1 X: n
                          value--;
3 O8 G. D+ \6 v) W( B4 x* h6 [. J                        }5 ?3 d0 _& u  x) A; `& A
                                0 ?3 n( G, F; S5 f; d( S
                }# W' c5 v0 N! d2 }; L) J

% E$ g+ u& g& i# m8 L. [; b5 [                if(value==1000)
& x% g3 u9 O6 j; U, Y; s4 u                {
- X9 P# F7 f& f6 V+ J                  DIR=0;. P( `/ m3 B- v: j
                }- J4 @( \$ `; j, K8 D/ d
                if(value==0)0 v  m! ]1 w/ `' l9 A% _, ~' K" H7 @8 q, b
                {; w8 z1 ^3 ^& O8 q( p9 u, }
                  DIR=1;6 p5 P% m5 k6 C+ J% p
                }        
! \4 T% m9 M" f4 R& Z                                
* h: M: |: J6 @' w                if(timer1>1000)  //PWM周期为1000*1us# r+ f! ^4 d/ F9 U) X, h
                {  u/ A$ m, I0 V  v, e" j
                        timer1=0;
) X, S9 w& ]2 E! q                }
% ^) b9 E! Y6 q9 Y  N/ ]% f) O; W                if(timer1
5 H  G3 i3 F( ]1 G& {+ Y% W                {
, p8 e' r* ?) T                        PWM=1;
" q1 B6 K8 M* o                }4 x6 J. ^! ]6 S; \" }
                else* K' L+ I5 ]2 J2 K7 g
                {
( v' h% ]2 d+ k+ X  `8 l                        PWM=0;! O3 u% c* O' U; R+ b& Z; O1 S
                }               
( S, w8 k! Z9 R; _        }                % Y# q- L/ q* m+ ?+ t- |% j: K: y
}9 W& x, L& r7 N$ l( T. `5 `+ [
/*******************************************************************************
+ a& s8 i1 x; L- {% r( ~* 函 数 名       : Time1
& x( H3 X5 x0 C9 c, d9 j$ X) d* 函数功能                 : 定时器1的中断函数
1 m: u3 U' V( @0 H# m( K* 输    入       : 无
3 l8 A0 g( D! D. I* 输    出       : 无1 i  u( a, f2 t4 b
*******************************************************************************/% g& z7 H/ [% J! D; p8 Y  v
void Time1(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断. W% w7 m, v8 R
{
: Z; v2 K- H6 D2 B0 O; I        TH1 = 0xFF;
9 p7 i0 T$ S1 V4 T4 d+ N        TL1 = 0xff;   //1us" Q7 o! Y" _" a4 q# i/ s
        timer1++; 6 _* ^' u4 ?1 R  }
    count++;
6 N& H3 V, @$ o( s}! X& q4 X8 U6 v6 ^7 G' u

该用户从未签到

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-8-3 12:39 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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