佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2375|回复: 16

soft I2C & soft uart的问题 (mikro c & ccs c)

[复制链接]
发表于 19-8-2009 12:11 PM | 显示全部楼层 |阅读模式
嗨!我是新会员。我不是很会用soft I2C 的功能  (我是用 microC compiler), 要如何更改soft i2C 的clock?

[ 本帖最后由 fritlizt 于 19-8-2009 01:44 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 19-8-2009 12:24 PM | 显示全部楼层

如何用io port (除了C7)来收 8 bits data?

我想问要如何用io port (除了C7)来收 8 bits data. 我是用CCS compiler 来写这些程序的。我试过用
“#USE RS232(BAUD=9600, XMIT=PIN_B1, RCV=PIN_B0)“, 这个程序可以发送data, 可是不能收data. 有没有决解方法。
回复

使用道具 举报

发表于 19-8-2009 02:04 PM | 显示全部楼层
1. 为什么你的帖没人回覆?
不是没人会, 而很多时候是你的资料不齐, 别人很难回覆, 或根本不想回覆。。。
那在发问题时:写出:
i. 你要想做什么? 你的应用是什么?
ii. 你想要拿到什么效果
iii. 你做了什么
iv. 你遇到了什么问题。
v. 你用什么MCU?
vi. 你用什么语言? ASM /C/PICBasic/Keil?Compiler 版本?
vii. 有源码吗? 有电路图吗?
viii. 有照片/图片补充吗?
清清楚楚的。。。能多详细, 就写的多详细, 才会得到有效的回覆。

2. 如果是学生问功课, 请注明你是什么学校, 几年级生,什么major.

hihi,欢迎来到单晶片分区。
不过发贴前,请看版规。
以你的资料。 我只能回答你。。。。
1。soft i2c在mikro c,我不会。
2。ccs software usart我用得好好的。我不懂你的是什么问题
回复

使用道具 举报

 楼主| 发表于 19-8-2009 02:49 PM | 显示全部楼层

回复 3# fritlizt 的帖子

对不起,小弟是MMU 二年级的学生, 刚刚 学用CCS compiler,有很多功能我都不是很会用。请大师多多指教。我的问题是无法用port_B0来 receive data. 我用的IC是PIC16f887. 我试了很多天, 可是都收不到data。请大师打救小弟.
回复

使用道具 举报

发表于 19-8-2009 04:08 PM | 显示全部楼层

回复 4# xiao1987 的帖子

port B0 input/output有没有 设好?
回复

使用道具 举报

 楼主| 发表于 19-8-2009 04:36 PM | 显示全部楼层

回复 5# bakayalo 的帖子

以下是小弟写的程序,我用MULTIMETER 试了很多次,PIN_C2都无法试拿到 五 VOLTS. 我都是拿 0 VOLTS。请大师指点迷津。
#include <16F887.h>
#fuses INTRC
#use delay(clock = 4000000)
char state=0;
#USE RS232(BAUD=9600, XMIT=PIN_B1, RCV=PIN_B0)
#INT_RDA              
void isr_rs232(){
      state=1;
}
void main (){
   setup_oscillator(OSC_4MHZ);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
   
   output_low(PIN_C2);
   while(TRUE){
      if(state==1){
         output_high(PIN_C2);      
      }else{
         output_low(PIN_C2);
      }
   }
}
回复

使用道具 举报

Follow Us
发表于 19-8-2009 04:52 PM | 显示全部楼层

回复 6# xiao1987 的帖子

两个主要可能性:
1。uart收到了,只是你的C2不能high
2。uart收不到

-〉2。用debug mode,试下 放break point在 “state=1;”看uart有没有收到?


--〉port 的 input/output好像没有设好将的(B0 和C2)? 请参考 datasheet,port direction, tris。。
回复

使用道具 举报

 楼主| 发表于 19-8-2009 05:34 PM | 显示全部楼层

回复 7# bakayalo 的帖子

小弟用过大师教的方法, 得到的结果是UART 没收到DATA. 小弟想请问大师,我用的是CCS COMPILER , 有需要更改TRIS 吗? 我试过更改TRIS, 可是USART 还是拿不到DATA? 大师救救小弟!!!
回复

使用道具 举报


ADVERTISEMENT

发表于 20-8-2009 11:23 AM | 显示全部楼层
为什么你不选用 RS485 来做你的多个传送和接收 data 的连接点呢?
回复

使用道具 举报

 楼主| 发表于 20-8-2009 12:51 PM | 显示全部楼层

回复 9# sky_cs1986 的帖子

我不会用RS485, 大师请你传我两招!!!
回复

使用道具 举报

发表于 20-8-2009 03:15 PM | 显示全部楼层
原帖由 xiao1987 于 19-8-2009 04:36 PM 发表
以下是小弟写的程序,我用MULTIMETER 试了很多次,PIN_C2都无法试拿到 五 VOLTS. 我都是拿 0 VOLTS。请大师指点迷津。
#include
#fuses INTRC
#use delay(clock = 4000000)
char state=0;
#USE RS232(BAUD=960 ...


#int_rda 是给hardware usart.
你用是software usart
software usart不能有receive interrupt,除非你接在external interrupt pin.用external interrupt来trigger receive.
回复

使用道具 举报

发表于 20-8-2009 04:12 PM | 显示全部楼层
原帖由 xiao1987 于 20-8-2009 12:51 PM 发表
我不会用RS485, 大师请你传我两招!!!

在这里, 没有大师的。

什么是大师?
就是有自己体例的人, 才可以称大师。。。
比如RS485 是你发明的, 你提出的, 你才可以称为大师。

你可以叫老师, 但不是大师。
回复

使用道具 举报

 楼主| 发表于 21-8-2009 09:27 AM | 显示全部楼层

回复 11# fritlizt 的帖子

以下是小弟修改的程序,小弟用PORTB_0 as EXTERNAL INTERRUPT PIN, PORTB_0 会被triggered 当收到送来的data的时候, 可是小弟收不到送来的 8-bits data. 请老师教教小弟要如何用IO port 来收data。
#include <16F887.h>
#fuses INTRC
#use delay(clock = 4000000)
char state=0;
char data;

#USE RS232(BAUD=9600, XMIT=PIN_B1, RCV=PIN_B0)

//#INT_RDA              
//void isr_rs232(){
//      state=1;         
//}


#INT_RB
void isr_RB(){
      data=getc();
      state=1;         
}


void main (){
   setup_oscillator(OSC_4MHZ);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
   enable_interrupts(INT_RB0);
   enable_interrupts(INT_RB);
   output_low(PIN_C2);
   while(TRUE){
   
   
   
      if(state==1){
         if(data==0x01){
            output_high(PIN_C2);
         }
      }     
   }
}
回复

使用道具 举报

 楼主| 发表于 21-8-2009 09:36 AM | 显示全部楼层

回复 12# pic 的帖子

各位版主,在小弟心里,你们已经是大师了, 可是你们如此谦虚,小弟要和各位老师们多多学习。请各位多多指教。
回复

使用道具 举报

发表于 21-8-2009 10:46 PM | 显示全部楼层
#include <16F887.h>
#fuses INTRC
#use delay(clock = 4000000)
char state=0;
char data;

#USE RS232(BAUD=9600, XMIT=PIN_B1, RCV=PIN_B0)

//#INT_RDA              
//void isr_rs232(){
//      state=1;         
//}


//#INT_RB
//void isr_RB(){
//      data=getc();
//      state=1;         
//}


void main (){
   setup_oscillator(OSC_4MHZ);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
   enable_interrupts(INT_RB0);
   enable_interrupts(INT_RB);
   output_low(PIN_C2);
   while(TRUE){

   if(kbhit())//if rs232 got data input
   
{
   
data=getc();         
   
//if(data==0x01)
   
//{
        output_high(PIN_C2);
      //}
   
}

   }
}
回复

使用道具 举报

 楼主| 发表于 22-8-2009 10:44 AM | 显示全部楼层

回复 15# hi--520 的帖子

小弟用你的code试了,结果可以接收到8-bits data。真的是非常感谢这位老师的帮忙。谢谢老师出手打救小弟。还有各位曾经给过宝贵意见的老师们,小弟也非常感谢你们。衷心地感谢各位老师们。
回复

使用道具 举报


ADVERTISEMENT

发表于 22-8-2009 11:20 AM | 显示全部楼层

回复 15# hi--520 的帖子

我用了你的方法在PIC16F877A, 通常我们用 PIN_C6 & PIN_C7 来传送和接收 data。现在这个方法可以用其它 PIN 来当作传送和接收来用,真的很不错。感谢这位大大!

#include <16F877A.h>
#fuses HS, NOWDT, NOPUT, NODEBUG, NOLVP, NOBROWNOUT, CPD, PROTECT, NOWRT
#use delay(clock = 20000000)
#USE RS232(BAUD=9600, XMIT=PIN_B1, RCV=PIN_B0)

char data;

void main ()
{
   output_low(PIN_C0);

   while(TRUE){

   if(kbhit())//if rs232 got data input
   {
      data=getc();
               
      if(data==0x01)
      {
        output_high(PIN_C0);
      }
      else
      {
        output_low(PIN_C0);
      }
   }
}
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


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

GMT+8, 10-1-2025 09:14 AM , Processed in 0.149447 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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