佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: pikachew

请问RS232能显示BREADBOARD上的资料吗?

  [复制链接]
发表于 7-9-2011 10:02 PM | 显示全部楼层
er.
可是用REAL TERM 来读~和FLOW CONTROL 换成了NONE
完全没有显示任何东西.
因为这是读取PIC里SEN ...
pikachew 发表于 7-9-2011 06:49 PM



    问题1:你的realterm 的baud rate 的设置跟 PIC 的设置是一样吗?

    问题2:你的PIC 的代码?是采用PIC大大修改过的那个吗?

    问题3:PIC大大修改过的代码你明白它是这么运作的吗?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 8-9-2011 10:02 AM | 显示全部楼层
问题1:你的realterm 的baud rate 的设置跟 PIC 的设置是一样吗?

    问题2:你的PIC 的代码 ...
wkloh 发表于 7-9-2011 10:02 PM



    1 : REAL TERM BAUD RATE 设置是一样 9600。 因为CODING里没SET 到要传送的CHARACTER,所以REAL TERM DISPLAY 不到。这样对吗?
    2  : 我是用·PIC 大大修改过的CODING
   3: CODING 里不是说明Read character from UART??
是在CODING里SET 要传送的CHARACTERS?
谢谢。
回复

使用道具 举报

发表于 8-9-2011 10:48 AM | 显示全部楼层
1 : REAL TERM BAUD RATE 设置是一样 9600。 因为CODING里没SET 到要传送的CHARACTER,所以REAL  ...
pikachew 发表于 8-9-2011 10:02 AM

  1. #include "16f877a.h"
  2. #fuses XT, NOPROTECT, NoWDT, put, brownout
  3. #use delay(clock=4000000)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)

  5. void main()
  6. {
  7.   int incode;
  8.   while(1)
  9.    {
  10.       incode = getc(); // Read character from UART
  11.       printf( " ASCII = %d \n\r " ,incode); // Display it on
  12.    }
  13. }
复制代码
源码


如果没有理解错误的话,PIC大大的程式的运作,应该如下吧:
      incode = getc(); //这一行意识是无限等待 uart 接受1字元资料,存在incode
      printf( " ASCII = %d \n\r " ,incode); // 这一行意识是uart 发送 “ASCII = incode” 这整个句字个PC。incode 资料范围 0~255
}


以你在80楼的解说,电脑不做送数据,你的PIC如何接受数据再回发句组资料呢??
可是用REAL TERM 来读~和FLOW CONTROL 换成了NONE
完全没有显示任何东西.
因为这是读取PIC里SEND 给电脑的资料。。所以我没在电脑里打字然后按"SEND“。
这是说明电路出错吗?
回复

使用道具 举报

 楼主| 发表于 9-9-2011 08:37 PM | 显示全部楼层
源码


如果没有理解错误的话,PIC大大的程式的运作,应该如下吧:


以你在80楼的解说,电脑不做 ...
wkloh 发表于 8-9-2011 10:48 AM

意思就是说我一定要在REAL TERM里 SEND TEXT BOX 里打字,然后按“SEND"
然后DISPLAY SCREEN 显示我所SEND的TEXT 就表示成功?请问是这样吗?
谢谢。~
回复

使用道具 举报

 楼主| 发表于 25-9-2011 08:04 PM | 显示全部楼层
请问各位大大
[img]

Uploaded with ImageShack.us[/img]
这张图用4个CAPACITORS 而已,是否是对的呢?
谢谢
回复

使用道具 举报

 楼主| 发表于 5-10-2011 11:51 PM | 显示全部楼层
问题解决到了
现在新的问题来了关于LOOPING问题~
不知道该如何解决~如果不用LOOP的话,就会进入SLEEP MODE,可是用了,那些MESSAGE 又会一直重复不停。。请问各位大大有任何解决方案吗?
谢谢

#include "16f877a.h"
#fuses HS,PROTECT,NoWDT,put,brownout
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,ERRORS)

void main()
{
        while(1)
        {
                if(input(pin_a0)==1)
                {
                        output_low(pin_b0);
                        printf("No1");
                }
                        else
                {
                        output_high(pin_b0);
                printf("yes1");
                        }
               

                        if(input(pin_a1)==1)
                {
                        output_low(pin_b1);
                printf("No2");
                }
                        else
                {
                        output_high(pin_b1);
                        printf("yes2");
                        }
               
                }
        }
回复

使用道具 举报

Follow Us
发表于 8-10-2011 10:13 AM | 显示全部楼层
本帖最后由 pic 于 8-10-2011 10:26 AM 编辑

回复 86# pikachew

简单的方法是加flag, 记录之前输入的状态。
只是输出到RS232, 当flag 和输入有所改变时。


  1. #include "16f877a.h"
  2. #fuses HS,PROTECT,NoWDT,put,brownout
  3. #use delay(clock=4000000)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,ERRORS)

  5. int1 fiA0=0; // Flag
  6. int1 fiA1=0;

  7. void main()
  8. {
  9.    while(1)
  10.    {
  11.       if(fiA0!=input(pin_a0)) // Test if Flag is change status
  12.       {
  13.          fiA0=input(pin_a0); // lock Flag
  14.          if(input(pin_a0))
  15.          {
  16.             output_low(pin_b0);
  17.             printf("No1\n\r");
  18.          }
  19.          else
  20.          {
  21.             output_high(pin_b0);
  22.             printf("yes1\n\r");
  23.          }
  24.       }      
  25.       
  26.       if(fiA1!=input(pin_a1)) // Test Flag
  27.       {
  28.          fiA1=input(pin_a1); // lock Flag
  29.          if(input(pin_a1)==1)
  30.          {
  31.             output_low(pin_b1);
  32.             printf("No2\n\r");
  33.          }
  34.          else
  35.          {
  36.             output_high(pin_b1);
  37.             printf("yes2\n\r");
  38.          }
  39.       }
  40.    }
  41. }


复制代码
回复

使用道具 举报

 楼主| 发表于 8-10-2011 03:06 PM | 显示全部楼层
本帖最后由 pikachew 于 8-10-2011 03:07 PM 编辑
回复  pikachew

简单的方法是加flag, 记录之前输入的状态。
只是输出到RS232, 当flag 和输入有所改变 ...
pic 发表于 8-10-2011 10:13 AM



我想用LCD来DISPLAY,可是我用了PROTEUS 7.5 SIMULATION 来跑。
SIMULATION LCD里无法拿到我想要的RESULT.

可是 LOW时,TWO AND FOUR却无法正常的SHOW出来,会有一些很奇怪的符号和要开关SWITCH很多次。
HIGH 时,也会有一些很奇怪的符号出现。

请问会是CODE有问题还是PROTEUS有问题呢?
    #include "16f877a.h"
    #fuses HS,PROTECT,NoWDT,put,brownout
    #use delay(clock=4000000)
    #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,ERRORS)
#include "lcd.c"

    int1 fiA0=0; // Flag
    int1 fiA1=0;

    void main()
    {
lcd_init();
lcd_gotoxy(1,1);

       while(1)
       {

          if(fiA0!=input(pin_a0)) // Test if Flag is change status
          {
             fiA0=input(pin_a0); // lock Flag
             if(input(pin_a0))
             {
                output_low(pin_b0);
                printf("No1\n\r");

                lcd_putc("\fone");

             }
             else
             {
                output_high(pin_b0);
                printf("yes1\n\r");
            
                lcd_putc("\ftwo");
             }
          }      
         
          if(fiA1!=input(pin_a1)) // Test Flag
          {
             fiA1=input(pin_a1); // lock Flag
             if(input(pin_a1)==1)
             {
                output_low(pin_b1);
                printf("No2\n\r");

                lcd_putc("\f\nthree");
             }
             else
             {
                output_high(pin_b1);
                printf("yes2\n\r");
   
                lcd_putc("\f\nfour");

                 }
          }
       }
    }




[img][/img]
    谢谢。
回复

使用道具 举报


ADVERTISEMENT

发表于 8-10-2011 03:31 PM | 显示全部楼层
回复 88# pikachew

你的LCD 接错了吧。。
试试接去PortD
回复

使用道具 举报

 楼主| 发表于 9-10-2011 09:25 AM | 显示全部楼层
回复  pikachew

你的LCD 接错了吧。。
试试接去PortD
pic 发表于 8-10-2011 03:31 PM



    刚刚试了
接取PORTD 完全没反应
觉得应该是PROTEUS问题
回复

使用道具 举报

发表于 9-10-2011 08:54 PM | 显示全部楼层
刚刚试了
接取PORTD 完全没反应
觉得应该是PROTEUS问题
pikachew 发表于 9-10-2011 09:25 AM


编辑 LCD.C
按下面的接去Port D
Driver 支持Port B 或Port D
要用PortB, 要有这行, 如果没有, 默认是PortD
#define use_portb_lcd TRUE


  1. // As defined in the following structure the pin connection is as follows:
  2. //     D0  enable
  3. //     D1  rs
  4. //     D2  rw
  5. //     D4  D4
  6. //     D5  D5
  7. //     D6  D6
  8. //     D7  D7
  9. //
  10. //   LCD pins D0-D3 are not used and PIC D3 is not used.

  11. // Un-comment the following define to use port B
  12. // #define use_portb_lcd TRUE
复制代码
回复

使用道具 举报

 楼主| 发表于 9-10-2011 11:23 PM | 显示全部楼层
编辑 LCD.C
按下面的接去Port D
Driver 支持Port B 或Port D
要用PortB, 要有这行, 如果没有, 默 ...
pic 发表于 9-10-2011 08:54 PM


在RUN这SIMULATION我已经把PORTB 的“//"这个给移除了。可是问题还是存在m其实真真我要的是LDR AS INPUT.如图中的,可是LDR 在SIMULATION 里没反应,所以我改用了SWITCHES. 我GOOGLE SEARCH,有人说是SWITCHES会影响奇怪的CHARACTER在LCD

[img]

Uploaded with ImageShack.us
[/img]
谢谢,该如何让LDR 在SIMULATION里WORK呢?
回复

使用道具 举报

发表于 10-10-2011 12:18 AM | 显示全部楼层
回复 92# pikachew

发你的源码.C+ proteus .dsn (zip 起来)给我看看。。
回复

使用道具 举报

 楼主| 发表于 10-10-2011 11:33 PM | 显示全部楼层
回复  pikachew

发你的源码.C+ proteus .dsn (zip 起来)给我看看。。
pic 发表于 10-10-2011 12:18 AM



    .C+ proteus .dsn
这东西要到哪里找啊?
谢谢。
回复

使用道具 举报

发表于 11-10-2011 08:56 AM | 显示全部楼层
.C+ proteus .dsn
这东西要到哪里找啊?
谢谢。
pikachew 发表于 10-10-2011 11:33 PM

就是你目前的
1. CCS C 源码   *.C

2. Proteus  的*.dsn
回复

使用道具 举报

 楼主| 发表于 12-10-2011 01:07 PM | 显示全部楼层
回复 95# pic


    我刚刚买了LCD 来试了
CODE1:
    #include "16f877a.h"
    #fuses HS,PROTECT,NoWDT,put,brownout
    #use delay(clock=4000000)
    #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,ERRORS)
#include "lcd.c"

    int1 fiA0=0; // Flag
    int1 fiA1=0;

    void main()
    {
lcd_init();


       while(1)
       {

          if(fiA0!=input(pin_a0)) // Test if Flag is change status
          {
             fiA0=input(pin_a0); // lock Flag
             if(input(pin_a0))
             {
                output_low(pin_b0);
                printf("No1\n\r");


                lcd_putc("one");

             }
             else
             {
                output_high(pin_b0);
                printf("yes1\n\r");
            
                lcd_putc("two");
   
             }
          }      
         
          if(fiA1!=input(pin_a1)) // Test Flag
          {
             fiA1=input(pin_a1); // lock Flag
             if(input(pin_a1)==1)
             {
                output_low(pin_b1);
                printf("No2\n\r");

                lcd_putc("\nthree");
            
             }
             else
             {
                output_high(pin_b1);
                printf("yes2\n\r");
   
                lcd_putc("\nfour");

                 }
          }
       }
    }


放这CODE,LDR 完全没有FUNCTION 到,不知道是什么原因。

可是放这CODE,却可以FUNCTION.
    #include "16f877a.h"

    #fuses HS,PROTECT,NoWDT,put,brownout
    #use delay(clock=4000000)
    #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,ERRORS)

    int1 fiA0=0; // Flag
    int1 fiA1=0;

    void main()
    {
printf("PARKING LOT 1 - OK\r");
printf("PARKING LOT 2 - OK\r");

       while(1)
       {
          if(fiA0!=input(pin_a0)) // Test if Flag is change status
          {
             fiA0=input(pin_a0); // lock Flag
             if(input(pin_a0))
             {
                output_low(pin_b0);
                printf("Parking lot1 is unavailable\n\r");
             }
             else
             {
                output_high(pin_b0);
                printf("Parking lot1 is available\n\r");
             }
          }      
         
          if(fiA1!=input(pin_a1)) // Test Flag
          {
             fiA1=input(pin_a1); // lock Flag
             if(input(pin_a1)==1)
             {
                output_low(pin_b1);
                printf("Parking lot2 is unavailable\n\r");
             }
             else
             {
                output_high(pin_b1);
                printf("Parking lot2 is available\n\r");
             }
          }
       }
    }


为何有LCD的CODE在里面,LDR就不能FUNCTION呢?
。拆掉LCD了,用CODE1也是不行。
一个PORT不能有2个OUTPUT?谢谢
回复

使用道具 举报


ADVERTISEMENT

发表于 12-10-2011 02:40 PM | 显示全部楼层
回复 96# pikachew
你怎样接LCD? 接法?PortB? Port D?
LCD.C 怎样设定?

你用4Mhz的 crystal?
那么fuse 要用XT, 不是HS

发表code 用“代码 ”, 会比较容易阅读。
回复

使用道具 举报

 楼主| 发表于 13-10-2011 12:53 PM | 显示全部楼层
回复  pikachew
你怎样接LCD? 接法?PortB? Port D?
LCD.C 怎样设定?

你用4Mhz的 crystal?
那么 ...
pic 发表于 12-10-2011 02:40 PM
  1.     #include "16f877a.h"
  2.     #fuses XT,PROTECT,NoWDT,put,brownout
  3.     #use delay(clock=4000000)
  4.     #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,ERRORS)
  5. #include "lcd.c"

  6.     int1 fiA0=0; // Flag
  7.     int1 fiA1=0;

  8.     void main()
  9.     {
  10. lcd_init();

  11.         lcd_putc("one");       
  12. lcd_putc("one");       
  13.        while(1)
  14.        {

  15.           if(fiA0!=input(pin_a0)) // Test if Flag is change status
  16.           {
  17.              fiA0=input(pin_a0); // lock Flag
  18.              if(input(pin_a0))
  19.              {
  20.                 output_low(pin_d6);
  21.                 printf("No1\n\r");


  22.                                 lcd_putc("one");

  23.              }
  24.              else
  25.              {
  26.                 output_high(pin_d6);
  27.                 printf("yes1\n\r");
  28.                        
  29.                                 lcd_putc("two");
  30.        
  31.              }
  32.           }      
  33.          
  34.           if(fiA1!=input(pin_a1)) // Test Flag
  35.           {
  36.              fiA1=input(pin_a1); // lock Flag
  37.              if(input(pin_a1)==1)
  38.              {
  39.                 output_low(pin_d7);
  40.                 printf("No2\n\r");

  41.                                 lcd_putc("\nthree");
  42.                        
  43.              }
  44.              else
  45.              {
  46.                 output_high(pin_d7);
  47.                 printf("yes2\n\r");
  48.        
  49.                                 lcd_putc("\nfour");

  50.                      }
  51.           }
  52.        }
  53.     }
复制代码


换了OUTPUTPORT 现在可一走了。
问题是为什么比如说从YES1换取NO1是会显示:YES1,YES1,NO1
而不是YES1,NO1呢?是因为LOCK FLAG的关系吗?
谢谢
回复

使用道具 举报

发表于 13-10-2011 05:06 PM | 显示全部楼层
回复 98# pikachew


  没有debounce。

21:             fiA0=input(pin_a0); // lock Flag
                     delay_ms(100); // 加入这个试试看是否可以解决问题。
22:             if(input(pin_a0))
回复

使用道具 举报

发表于 13-10-2011 07:42 PM | 显示全部楼层
本帖最后由 pic 于 13-10-2011 08:21 PM 编辑

回复 96# pikachew


看了你的图和源码, 发现你是把input接去PortB, LCD 又接去Port B, 就有冲突, 所以不会运行。


1. LDR 是要显示用没有障碍物?
2. LDR 的光源是什么?

3. 还有你的LED,目的是什么?
4. LED 是作为LDR 的光源?
5. 还是LED 是要显示LDR 的状态?

感觉错误百出, 要帮你, 要先明白1~5的问题.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 19-4-2024 12:26 PM , Processed in 0.072572 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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