標(biāo)題: 單片機定時器2作為串口,定時器1同時開啟,程序自動復(fù)位 [打印本頁]

作者: Letu9811    時間: 2021-12-21 21:00
標(biāo)題: 單片機定時器2作為串口,定時器1同時開啟,程序自動復(fù)位
把定時器2作為串口波特率來接收藍(lán)牙數(shù)據(jù),定時器1用來PWM調(diào)速,藍(lán)牙發(fā)送指令之后接收到指令,定時器1進(jìn)入中斷之后就直接復(fù)位了
一開始是能夠接收之后正常執(zhí)行指令的,多發(fā)送幾次之后就會出現(xiàn)這種問題,手動復(fù)位之類的也試過,只要出現(xiàn)這個情況之后就會一直這樣子

單片機源程序如下:
  1. void car_timer_isr() interrupt 3
  2. {
  3.         TH1 = (T1_VAL) / 256;
  4.         TL1 = (T1_VAL) % 256;
  5.         if(car_pwm_left == 0)
  6.         {
  7.                 car_motor_left_forward = 0;
  8.                 car_motor_left_backward = 0;
  9.         }else if(car_tick < car_pwm_left)
  10.         {
  11.                 if(car_dir_left) //前進(jìn)
  12.                 {
  13.                         car_motor_left_forward = 1;
  14.                         car_motor_left_backward = 0;
  15.                 }else{
  16.                         car_motor_left_forward = 0;
  17.                         car_motor_left_backward = 1;
  18.                 }
  19.         }else{
  20.                 car_motor_left_forward = 0;
  21.                 car_motor_left_backward = 0;
  22.         }
  23.         if(car_pwm_right == 0)
  24.         {
  25.                 car_motor_right_forward = 0;
  26.                 car_motor_right_backward = 0;
  27.         }else if(car_tick < car_pwm_right)
  28.         {
  29.                 if(car_dir_right)
  30.                 {
  31.                         car_motor_right_forward = 1;
  32.                         car_motor_right_backward = 0;
  33.                 }else{
  34.                         car_motor_right_forward = 0;
  35.                         car_motor_right_backward = 1;
  36.                 }
  37.         }else{
  38.                 car_motor_right_forward = 0;
  39.                 car_motor_right_backward = 0;
  40.         }
  41.         car_tick++;
  42.         if(car_tick >= 10)car_tick = 0;
  43. }
復(fù)制代碼









歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1