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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用
9 j- a6 C5 G3 r( ~% Y; O8 r7 }& O6 p
#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器( f* V. Q3 C1 H6 x( L  C% V

: V( k" n& `* ^/ @7 ctypedef unsigned int u16;          //对数据类型进行声明定义: l- f+ V3 z* J4 D5 Q& g
typedef unsigned char u8;; R8 _# _% A) Q& Z  G$ ?! a

0 N) c; X. h5 S) l% o7 w4 S//--定义使用的IO口--//
& K9 l- G8 M" U$ y***it PWM=P2^1;
8 \2 O0 N9 b6 i1 Dbit DIR;$ K. c( O) @! Y% [  m+ Q
) ~8 Y7 y: t5 M) c
//--定义一个全局变量--//
, {4 e7 P( U4 ~; H& b3 mu16 count,value,timer1;  m3 @" N  {+ B4 K0 P5 e
0 K. }2 ^" E" m3 C0 G
/*******************************************************************************
+ u7 p& I. Q& b) C  d! ~( e* 函 数 名         : Timer1Init
4 Z7 c0 V, V' i" Y2 U$ T- t& y: Z* 函数功能                   : 定时器1初始化/ Y6 [( ?6 B- j
* 输    入         : 无3 m2 A$ u* l" C- I5 a& v5 C) p3 G
* 输    出         : 无: z  u+ I7 K- K3 M! F+ y
*******************************************************************************/  B# w# j9 g7 Y( ^
void Timer1Init()- c( Q1 l" z3 ?4 Y2 n3 H. D3 c# F
{$ f* `& W3 m8 a: c1 C8 P1 q7 y
        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
1 V' ?3 u  Q, b& u! M
; Y& M+ u0 b9 l" f+ r# t        TH1 = 0xFF;
+ q% c8 _% Z- k$ M2 @2 E        TL1 = 0xff;   //1us
5 Y$ G) g( [% `               
* R! Q7 E! ^' Q! M        ET1=1;//打开定时器1中断允许- I5 e9 o+ K6 x- G. U
        EA=1;//打开总中断& z! @$ d/ d3 H3 ]8 P8 \
        TR1=1;//打开定时器                        9 c1 ^. g+ o; h* {4 T1 \2 z& z
}! |, D. n1 O" E6 g! y
/*******************************************************************************1 [# E9 I% `( @. h4 \& `( Y
* 函 数 名       : main
1 H- \) a5 d: p6 o: y& W9 P* B* 函数功能                 : 主函数
! p" q/ {" F0 L$ |0 _* 输    入       : 无
9 W' i( B. h/ c3 v1 D* 输    出             : 无# q0 P% p: H, X: S  S" g: Q
*******************************************************************************/; h( G/ H! W$ P$ o
void main()
+ t1 ^: j- o6 k: O+ I{        8 q4 R, P+ I8 t; R) c
        Timer1Init();  //定时器1初始化
  b( I# ]1 G4 o2 @        while(1)* Z+ G) \; d0 w' M6 @2 x+ J: J# n8 k8 J
        {
8 U2 S, r5 r, r/ s" k) `) A" v% n, ^                if(count>100)                                                        
5 m$ X3 T9 E: w$ l                {  
* T# }) M+ E+ ]: u0 B& z, K( z                        count=0;+ e0 ^- p6 b- c) ^- s9 r& t8 p
                        if(DIR==1)                                           //DIR控制增加或减小
- X1 g# g6 h  v3 V) p# r8 ^5 J                        {% n+ N# j: a( o7 C2 n
                          value++;) \3 T, M4 A( W# W. {8 E/ [
                        }                        $ m7 Z  h* I2 M9 b+ [) @
                        if(DIR==0)! p7 s- x( H6 Z/ w1 c/ W
                        {, f5 |+ N8 k( v; P
                          value--;# g8 f; C/ ^4 b% Z
                        }
/ U2 h$ ?% |/ g                                
  y: W. V4 ?) E! ]/ p2 z; V                }
. k7 j; J+ ^$ T7 y8 F8 ]* g" L) y- n0 y$ ^$ ]7 S9 G( e' G
                if(value==1000)8 Y+ ?% b% M/ o$ U
                {
1 J' u- }+ |5 c7 k6 a) R                  DIR=0;
( D& O& V1 h+ I, ~8 L' ~                }5 g* l. i) v3 k2 F  n& W
                if(value==0)
- b( _5 c* X3 Z+ A                {
! S8 j9 |" r5 ]* y7 L                  DIR=1;
' z1 T5 O4 D( G: Q& s                }        $ t3 c, q; l1 o) M) O
                                4 k" E! C9 ^+ x- p8 Q( I- Q' S2 [
                if(timer1>1000)  //PWM周期为1000*1us
* Q; |: B" E, ]6 T6 T* O" `( {                {: V, S$ m) I+ s! o% S
                        timer1=0;5 X: V' G1 I. ?# e3 `
                }
8 T3 _- ^/ J! z3 _* P                if(timer1
2 W% a3 ?3 I+ f                {# y1 G0 O! T7 h0 l% c/ n
                        PWM=1;* z0 l4 V" d. J
                }
! `: u" j, B( \5 r* l                else: [: i6 j+ r: _8 [! E/ }* U+ X
                {
' ~# ?$ V- J& O; B                        PWM=0;4 S; c* W; ]% V
                }               
4 e" x, \$ a& g        }               
- v. y/ S  `. ~+ u# j}# p+ O% }7 m1 [  f6 O6 ?) ]9 F: L
/*******************************************************************************+ g9 T8 _3 ?) u# _
* 函 数 名       : Time1/ H. S) K/ M( U
* 函数功能                 : 定时器1的中断函数% R$ Y1 A( A0 t2 n, H: q" J
* 输    入       : 无0 y; ]5 b! \/ o- t
* 输    出       : 无3 d# i/ ?% ^+ Y
*******************************************************************************/
% F" j- b' b: r9 j( svoid Time1(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断: b6 H( e# f7 X8 z$ u( r. Z8 }
{, }9 W) N4 ~; ^3 S( e
        TH1 = 0xFF;
* E$ B3 y( G: ^9 M. Q        TL1 = 0xff;   //1us
! \7 n% D4 b4 v) C* H. _6 m        timer1++;
( m6 s6 T; n6 B6 N$ M9 F5 y    count++;, s' l2 l* o. U2 G
}/ k% l1 V0 `% b  |, f

该用户从未签到

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-23 19:27 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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