久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1759|回復: 6
打印 上一主題 下一主題
收起左側

請教單片機interrupt 4 控制步進電機圈數有問題 控制led運行正常

[復制鏈接]
跳轉到指定樓層
#
ID:1016815 發表于 2023-3-16 22:29 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
  1. #include<reg52.h>                  
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar buf;
  5. char code zh[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //--1# 此部分為步進電機控制部分
  6. void delay(char x)//延時程序
  7. {                          
  8.    char i;
  9.    while(x--)
  10.    {
  11.      for(i=0; i<120; i++);
  12.    }
  13. }
  14. void  motor(unsigned int a)//a即想要轉的圈數
  15. {
  16.    unsigned char b;
  17.    unsigned int  c;
  18.    for (c=0; c<8*64*a; c++)
  19.     {
  20.       for (b=0; b<8; b++)
  21.         {
  22.           P1 = zh[b];
  23.          delay(1);
  24.          }
  25.     }
  26. }//--1# 此部分為步進電機控制部分
  27.   void main(void)
  28. {
  29. SCON=0x50;//設定串口工作方式0101 0000  串行口控制寄存器SCON  詳細注釋后面
  30. PCON=0x00;                 //=PCON主要是為CHMOS型單片機的電源控制而設置的專用寄存器,在51單片機中單元地址是87H,其結構格式如下:
  31. TMOD=0x20;   //> 20=10100   //TMOD是定時器/計數器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)。
  32. EA=1;  //=EA引腳表示存取外部程序代碼之意,低電平動作,當此引腳接低電平后,系統會取用外部的程序代碼(存于外部EPROM中)來執行程序。EA引腳必須接低電平,因為其內部無程序存儲器空間。
  33. ES=1; //=           ES:串行口中斷控制位。ES=1,允許串行口中斷。
  34. TL1=0xfd; //=fd=11111101         為什么51單片機串行中斷中TL1和TH1的值要相同
  35. TH1=0xfd;  //= fd=11111101
  36. TR1=1;         //=                  TH1,TL1、TR1、TMOD是單片機的特殊寄存器 ,是用來控制計數/中斷器的.TMOD(工作方式控制寄存器);TH1/TL1是定時器/計數器1;TR1=1是啟動定時器1。
  37. while(1);
  38. }
  39. //串行中斷服務函數
  40. void serial() interrupt 4          //==          interrupt翻譯:打斷
  41.         {
  42.         ES=0;
  43.         RI=0;
  44.     buf=SBUF;                //= SBUF全稱serial data buffer,中文名稱“串行數據緩沖器”
  45. //**********************************************************************************
  46. //2#-段內容            =正確運行  等待串口助手"文本輸入數字后點亮燈光
  47. //if(buf<50)//35=3  可以輸入0 1點亮LED燈
  48. // P1=0X01;
  49. //***********************************************************************************
  50.           if(buf<100)//------------------1#--步進電機控制
  51.          {          delay(1000); //不知道什么問題加載電機就運轉,不是等待輸入數字轉多少圈,
  52.            motor(buf); //轉n圈(可以改動)         
  53.        delay(1000);
  54.        while(1) ;
  55.          } //------------------1#--步進電機控制<<
  56.         ES=1;//串口中斷
  57. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

6#
ID:846219 發表于 2023-3-18 22:39 | 只看該作者
我最近也遇到了,有啟發
回復

使用道具 舉報

5#
ID:1016815 發表于 2023-3-18 16:08 | 只看該作者
lkc8210 發表于 2023-3-18 13:37
While(1)后多了個分號

真的太感謝,太大意了。就是這個串口發送還是沒起作用,接通就轉,這個現象好像就是認現在的這個100作為參數去轉。不是等串口助手發送數據再去轉。
回復

使用道具 舉報

地板
ID:161164 發表于 2023-3-18 13:37 | 只看該作者
434939575 發表于 2023-3-17 21:00
感謝這位朋友的幫助。我這測試了電機沒有動。
不知道什么原因,是否要放 interrupt 里面,我放了也不行。
...

While(1)后多了個分號
回復

使用道具 舉報

板凳
ID:1016815 發表于 2023-3-17 21:00 | 只看該作者
感謝這位朋友的幫助。我這測試了電機沒有動。
不知道什么原因,是否要放 interrupt 里面,我放了也不行。
我照抄的,應該沒錯。
#include<reg52.h>                  
#define uchar unsigned char
#define uint  unsigned int
uchar buf;
char code zh[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //--1# 此部分為步進電機控制部分
void delay(char x)//延時程序
{                          
   char i;
   while(x--)
   {
     for(i=0; i<120; i++);
   }
}
void  motor(unsigned int a)//a即想要轉的圈數
{
   unsigned char b;
   unsigned int  c;
   for (c=0; c<8*64*a; c++)
    {
      for (b=0; b<8; b++)
        {
          P1 = zh[b];
         delay(1);
         }
    }
}//--1# 此部分為步進電機控制部分
  void main(void)
{
    SCON=0x50;//設定串口工作方式0101 0000  串行口控制寄存器SCON  詳細注釋后面
    PCON=0x00;                 //=PCON主要是為CHMOS型單片機的電源控制而設置的專用寄存器,在51單片機中單元地址是87H,其結構格式如下:
    TMOD=0x20;   //> 20=10100   //TMOD是定時器/計數器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)。
    EA=1;  //=EA引腳表示存取外部程序代碼之意,低電平動作,當此引腳接低電平后,系統會取用外部的程序代碼(存于外部EPROM中)來執行程序。EA引腳必須接低電平,因為其內部無程序存儲器空間。
    ES=1; //=           ES:串行口中斷控制位。ES=1,允許串行口中斷。
    TL1=0xfd; //=fd=11111101         為什么51單片機串行中斷中TL1和TH1的值要相同
    TH1=0xfd;  //= fd=11111101
    TR1=1;         //=                  TH1,TL1、TR1、TMOD是單片機的特殊寄存器 ,是用來控制計數/中斷器的.TMOD(工作方式控制寄存器);TH1/TL1是定時器/計數器1;TR1=1是啟動定時器1。
while(1);
{
  if(buf < 100 && buf > 0)
   {
  motor(buf);
  buf = 0;
      }
     }
  }//串行中斷服務函數
void serial() interrupt 4          //==          interrupt翻譯:打斷
        {
        RI=0;
   buf=SBUF;                //= SBUF全稱serial data buffer,中文名稱“串行數據緩沖器”
          }
回復

使用道具 舉報

沙發
ID:161164 發表于 2023-3-17 10:31 | 只看該作者

回復

使用道具 舉報

樓主
ID:1016815 發表于 2023-3-16 22:34 | 只看該作者
請教各位朋友們,我運用interrupt 4 串口助手輸入數字,即等待輸入后控制LED ,
但步進電機不起作用,下載程序后就開始運轉,不知道什么問題,我是想輸入數據步進電機走多少圈。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一二区在线 | 亚洲美女视频 | 香蕉久久av| 国产999精品久久久影片官网 | 亚洲综合国产精品 | 国产精品久久久久久久久久 | 噜噜噜噜狠狠狠7777视频 | 亚洲区在线 | 亚洲精品一区二三区不卡 | 国产日韩欧美激情 | 日韩中文一区二区三区 | 日本三级网站在线观看 | 伊人中文字幕 | 午夜国产一级 | 日韩欧美一级精品久久 | 国产精品小视频在线观看 | 国产乱码精品一区二区三区中文 | 色综合天天天天做夜夜夜夜做 | 国产小视频自拍 | 国产一区二区 | 国产色片在线 | 91免费视频 | 影音先锋中文字幕在线观看 | 亚洲久久在线 | 国产欧美一区二区三区另类精品 | 久久国产一区二区 | 国产在线观看一区二区 | 男女视频在线观看免费 | 国产乱码精品一区二区三区忘忧草 | 成人欧美 | 四虎影院在线播放 | 中文一区 | 国产精品日韩一区二区 | 91久久北条麻妃一区二区三区 | 亚洲码欧美码一区二区三区 | 免费a大片 | 看毛片网站 | 国产精品99久久久久久宅男 | 久草青青草 | 在线免费观看成年人视频 | 亚洲国产欧美在线人成 |