|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我这个程序期望功能是输出频率不同的方波波形,但是使用定时器计时的结果跟理想的结果差异很大,比如默认输出频率为100Hz的波形,那周期就应该是10ms,但是我用我的程序仿真出来周期大概是15ms,问题出在哪。
2 D" f5 N, f' p D2 P( @- #include
- unsigned int F,X = 3;//F是频率(Hz)
- unsigned int count = 0;
- unsigned int time,Time1;
- ***it start = P2^0;
- ***it output = P1^0;
- void Frequence_Choice(X)
- {
- switch(X)
- {
- case 0: F = 10;break;
- case 1: F = 20;break;
- case 2: F = 50;break;
- case 3: F = 100;break;
- case 4: F = 200;break;
- case 5: F = 500;break;
- case 6: F = 1000;break;
- }
- Time = 10000 / F;//计算周期
- Time1 = Time / 10 * 3;
- }
- void out()
- {
- TR0 = 1;
- if(count <= Time)
- {
- if(count <= Time1)
- output = 1;
- else
- output = 0;
- }
- else count = 0;
- }
- void initialize( void )
- {
- EA = 1;
- EX0 = 1;
- EX1 = 1;//外部中断开启
- IT0 = 1;
- IT1 = 1;//设置外部中断触发方式
- ET0 = 1;//定时器中断打开
- TR0 = 1;//启动定时器0
- TH0 = 0xFF;//0xD8;
- TL0 = 0x9C;//0xEF;//重置定时器初值(100us)
- }
- main()
- {
- initialize();//初始化
- Frequence_Choice(X);
- while(1)
- {
- if(start == 0) out();
- }
- }
- void timer0() interrupt 1
- {
- count++;//计数
- TH0 = 0xFF;//0xD8;
- TL0 = 0x9C;//0xEF;//重置定时器初值
- }
- void add() interrupt 0
- {
- if(X < 6) X = X + 1;
- else X = 6;
- Frequence_Choice(X);
- }
- void subtract() interrupt 2
- {
- if(X > 0) X = X - 1;
- else X = 0;
- Frequence_Choice(X);
- }% s( B2 G4 H; n6 @( u- h
% Q8 ^0 q! B( n9 f) Y! h3 y4 } I- G2 i# s
% }9 V. T# d$ {# h5 g2 f
6 q `8 _. q6 a2 b# F5 c w6 b, ^. o |
|