导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[AbrahamGwang]C51编程:救命!CYGNAL C805



No.2357
作者:AbrahamGwang
邮件:AbrahamGwang@yahoo.com
ID:6339
登陆:1次
文章数:6篇
最后登陆IP:
最后登陆:2001/8/16 19:47:00
注册:2001/8/16 19:47:00
财富:28
发帖时间:2001/11/4 12:06:00
发贴者IP:172.149.153.82
标题:AbrahamGwang:C51编程:救命!CYGNAL C8051单片机通信3/3
摘要:No.2357C51编程:救命!CYGNAL C8051单片机通信3/3 请教古班主和各路高手有关CYGNAL C8051F000 单片机与PC 通信的问题, 
请解答讨论。

新近购置一台CYGNAL C8051F000单片机,感觉的确设计不俗。阅读
MANUAL 后, 发现其内置晶振可以由软件设定为2MHZ,4MHZ, 
8MHZ,16MHZ。
同时也可以外接11.059200MHZ,18.432MHZ的晶振。

我想用9600,8,N,1的参数与PC通信,不知道如何编程,CYGNAL C8051F000
单片机的编程指令,是否与普通8051单片机指令相兼容?

曾经采用普通8031单片机,用以下语句,通信(6MHZ晶振,2400,8,N,1)成功:

------------------------------------------------*/
#ifndef MONITOR51
    SCON  = 0x50;            /* SCON: mode 1, 8-bit 
UART, enable rcvr      */
    TMOD  = 0x20;                   /* TMOD: timer 1, mode 2, 8-bit 
reload        */
    PCON  = 0x80;                   /* PCON: Power control frequency 
double       */
        TH1   = 0xf3;            /* 2400 bps, 
TH1:  reload value /6MHz          */
    TL1   = 0xf3;    
    TR1   = 1;                      /* TR1:  timer 1 run                          */
    TI    = 1;                      /* TI:   set TI to send  first char of UART    */
#endif 
------------------------------------------------*/
)
不知道是否可以如法炮制到CYGNAL系统?另外用TH1 RELOAD value 公
式TH1=256 - 2fosc/(384 X bps) [SMOD=1时];
TH1=256 - fosc/(384 X bps) [SMOD=0时], 采用11.0592MHZ晶振,
9600,8,N,1的参数, 计算得TH1=250 [SMOD=1时];
TH1=253 [SMOD=0时];
上述公式是否适用于晶振为2MHZ,4MHZ, 8MHZ,16MHZ? 菜鸟本人不
明白用上述晶振, CYGNAL系统怎样与PC通信?
以下是CYGNAL 公司提供的Keil C51通信范例AN015SW 3/3部分(因帖子有
16K限制,不能一次发完,故分为3部分), 愚夫难以应用, 敬请高手指教。

        // Check Transmit interrupt; service if CCF1 is set.
        else if (CCF1){ 
            CCF1 = 0;            
                        // 
Clear interrupt flag
            switch (SUTXST){
                
                // State 0: Transmit Initiated.
                // Here, the user has loaded a 
byte to transmit into TDR, and set the
                // module 1 interrupt to 
initiate the transfer.
                // - Transmit START bit 
(drop SW_TX)
                // - Read PCA0, add one bit 
time, & store in module 1 capture registers
                //   for first bit.
                // - Increment TX state 
variable.
                case 0:

                    SW_TX = 0;    
                        // 
Drop TX pin as START bit.
                    
                    PCA_TEMP = 
PCA0L;                    // Read PCA 
counter value into
                    PCA_TEMP |= 
(PCA0H << 8);        // PCA_TEMP.

                    PCA_TEMP 
+= TIME_COUNT;            // Add 1 bit time.

                    PCA0CPL1 = 
PCA_TEMP;                // Store updated 
match value into
                    PCA0CPH1 = 
(PCA_TEMP >> 8);    // module 1 capture/compare registers.

                    PCA0CPM1 |= 
0x48;                    // Enable 
module 1 software timer.

                    SUTXST++;    
                        // 
Update TX state variable.                
                    break;

                // States 1-9: Transmit Bit.
                // - Output LSB of TDR 
onto TX
                // - Shift TDR 1 bit right.
                // - Shift a '1' into MSB of 
TDR for STOP bit in State 9.
                // - Add 1 bit time to module 
1 capture register
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                    
                    SW_TX = 
(TDR & 0x01);            // Output LSB of TDR onto 
SW_TX pin.
                    TDR >>= 1;    
                        // 
Shift TDR right 1 bit.
                    TDR |= 0x80;
                        // 
Shift '1' into MSB of TDR for
                        
                        
            // STOP bit in State 9.

                    PCA_TEMP = 
(PCA0CPH1 << 8);    // Read module 1 contents into
                    PCA_TEMP |= 
PCA0CPL1;            // PCA_TEMP.

                    PCA_TEMP 
+= TIME_COUNT;            // Add 1 bit time to 
PCA_TEMP
    
                    PCA0CPL1 = 
PCA_TEMP;                // Restore 
PCA0CPL1 and PCA0CPH1
                    PCA0CPH1 = 
(PCA_TEMP >> 8);    // with the updated value    

                
    SUTXST++;                     // Update TX state variable.
                    break;
                    
                // State 10: Last bit has been 
transmitted.  Transmit STOP bit
                // and end transfer.  
                // - Transmit STOP bit
                // - Set TX Complete 
indicator, clear Busy flag
                // - Reset TX st ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:31毫秒 最大:3859毫秒 查询6次