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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我想用DA(PWM)来实现一个呼吸灯的效果,没看懂count在代码里起什么作用7 p6 t2 L0 Z; _; l: o5 R

( L; N3 T3 k- S#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器4 E. h% H, R; `" i& M- |! T
$ W3 E1 J/ E  V" G# [6 o
typedef unsigned int u16;          //对数据类型进行声明定义7 {1 o) ?, c) I# Y. S9 k, Y
typedef unsigned char u8;
8 G' O, B6 O+ w2 p, C( u2 j& k  C& ^% e. l$ a% W1 s
//--定义使用的IO口--//4 w+ K5 G* G. c, G
***it PWM=P2^1;; W2 O/ J5 r; r; i- I' s9 S+ E
bit DIR;- Y# L) g0 @0 w+ u$ E0 F
  X, a, q3 D& G& m7 m4 K3 ]
//--定义一个全局变量--//   C  ~1 V8 o) _" |
u16 count,value,timer1;
/ x/ D7 m: i! n/ b  }. _- n! ?
' M8 {" C7 p) c+ A4 y" W/*******************************************************************************
( v9 Q& Z3 M* p! i* 函 数 名         : Timer1Init/ q+ [2 e* L% l' U6 N6 h8 U& w8 t
* 函数功能                   : 定时器1初始化
4 ?- O8 n0 L/ @( [9 M* d0 `4 @% Y* 输    入         : 无" z9 }0 u5 f' K# W/ G8 _
* 输    出         : 无
+ C7 V0 V: ]% D* }# k6 ~& i8 b*******************************************************************************/
- ]0 m$ I/ H/ S; fvoid Timer1Init()
  Y# v& M, h# ^4 M6 J{$ N: {( J" F; ?) c
        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
7 N8 V/ m4 c. L6 k7 Y) z0 H* Q, g3 e$ ]
        TH1 = 0xFF; 5 ^" v# _% c+ G4 m; S: J
        TL1 = 0xff;   //1us
4 a$ T# G  c; b3 r                3 y; b) f  ]6 ^; Y+ o4 N( J8 C
        ET1=1;//打开定时器1中断允许
/ _! e7 ~, c# R+ m- u6 u/ }- C        EA=1;//打开总中断5 a7 a1 o  j  _1 [* R* z
        TR1=1;//打开定时器                        - d9 w) h7 u9 g+ i& b. o
}1 t* ^0 A& \* |  u+ m
/*******************************************************************************: t# R; }6 ]' H
* 函 数 名       : main9 w- F: s) I  m0 F, {: o
* 函数功能                 : 主函数
9 T6 Y0 s& ~; A% o3 k* G+ ?. T* 输    入       : 无' e: b" i+ ?9 X* F5 `
* 输    出             : 无) s# p/ `, F) k; t
*******************************************************************************/
# n  Z' `) _6 Y" t0 A& x+ M) Vvoid main()
4 \& t; t% S) @  I0 ?' P* N+ k{        
% L+ N1 q* Z" ]* t$ X        Timer1Init();  //定时器1初始化0 b7 P) ^2 u  T: v8 ^
        while(1)
* h( u- Z9 e4 S8 o! j* H% h        {7 j' k7 m6 \# f7 q/ \6 T
                if(count>100)                                                        4 r1 b' |# X: T! L- w
                {  
/ X! S/ A4 O. k( o! B9 Q# Y9 H% t                        count=0;
+ x4 [9 z+ J* e6 j3 x9 M* C                        if(DIR==1)                                           //DIR控制增加或减小
# I: y7 I- r( G% q4 \                        {
/ H# Z/ L  N4 ?* e3 T                          value++;
: W0 P. V% b; n( u# M                        }                        
2 f2 L: i7 }% ~: [) z/ n) v2 ?                        if(DIR==0)
; G8 H3 i+ Z# k% @                        {" D% m' h; j1 a* q& i
                          value--;
/ P- D8 E1 a' M# v) P: o' j, D; _7 q3 O                        }
8 f- P; _$ C$ V1 W' w! Y* L                                
+ M+ n7 b" Y* R                }
9 [5 `+ Q0 G" \% X# s. E" p
* y+ E4 M( `% N- R8 }( P" `                if(value==1000)9 O  f. L# \& H! _2 P" K  D( Y+ {
                {
( Y& B6 n  {. i6 _4 [3 ~3 J                  DIR=0;
" Z6 ]8 i0 W; q7 r! {, x6 C# A. j# @                }# a' p1 v  w( P( f% S5 `: Y9 @1 M
                if(value==0)
. @/ d$ j8 Y# l: g  {) E                {
+ F% M# B, M2 @                  DIR=1;
6 b! b6 M; k  v0 `" o0 P/ N' S( d                }        
6 P5 C; ~& r0 k3 F1 w; t. Y; X, B                                
6 f' [1 U+ @3 R" `                if(timer1>1000)  //PWM周期为1000*1us+ V7 m* U1 D( E1 A
                {0 ]5 i+ i3 w4 C$ @# [  j5 v
                        timer1=0;
6 R$ u" k% b+ D                }
8 Y% ]. z4 Z, y7 e# m+ J# y! }                if(timer1
9 _. l; l3 w( @/ D7 [3 z, l                {
) b$ b* P+ G$ p* e                        PWM=1;1 q- ]) ?- e7 G+ W
                }5 X5 d+ ?% a: O3 `' H8 V
                else
. x5 z2 s4 R3 R* `  r                {- r' V' o6 l0 i
                        PWM=0;
. ], a8 b$ @4 k3 f! [# z                }                2 B  _6 U' x0 o, M" q: g' _( u
        }                % h/ W% K% E5 ^1 E% a$ I
}  v8 Z& C; \+ H  c, I* P
/*******************************************************************************
9 b9 b+ J& Q: V! J) X* 函 数 名       : Time1
, M4 |" R# ?- d1 s4 y* 函数功能                 : 定时器1的中断函数: R; V, [/ W! ^% L
* 输    入       : 无
0 V! s) ~1 n( _* \8 j* 输    出       : 无: D  k% K& s7 f# f6 T
*******************************************************************************/5 g4 g/ C! P$ g- N6 k
void Time1(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断% u4 Y  y- y4 a3 r
{
1 @& ^0 S' R( l2 J; B        TH1 = 0xFF;
$ {  a" h) e  U: F% a        TL1 = 0xff;   //1us, m6 f1 m5 r5 R: G/ Y
        timer1++;
% c- o" f9 u$ [8 j4 G4 v! S( T    count++;9 k3 N# r5 S; @6 L- o
}6 D7 x: m, J3 `! e4 t  u& P

该用户从未签到

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-10-8 18:52 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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