这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » at91sam7s64 at91sam7s64的程序问题求救!真心谢谢各位!!急

共2条 1/1 1 跳转至

at91sam7s64 at91sam7s64的程序问题求救!真心谢谢各位!!急!

院士
2006-09-17 18:14:16     打赏
at91sam7s64 at91sam7s64的程序问题求救!真心谢谢各位!!急!



关键词: at91sam7s64     程序     问题     求救     真心         

院士
2006-12-22 22:43:00     打赏
2楼
问 我想问的是,AT91SAM7S64的I/O口平常输出的低电平吗?下面是我的程序!为什么我读按件的制没有起作用呢,我的目的是按一个键对应的LED亮,就这么简单,为什么LED一上电就一直亮,下面是我的程序!请知道的给我查下错误谢谢!
#include "AT91SAM7S64.h"
#include "Board.h"
unsigned int Key_Val;
unsigned int key;
int main(void)
{
unsigned int delay;
*AT91C_PMC_SCER = 1;
*AT91C_PMC_PCER = SW_MASK;        //使能PIO口时钟
*AT91C_PIOA_PER = LED_MASK | SW_MASK;//使能4个LED与4个KEY脚I/O口功能
*AT91C_PIOA_OER = LED_MASK;        //使能4个LED管脚的输出功能
*AT91C_PIOA_ODR = SW_MASK;        //使能4个KEY管脚的输入功能
*AT91C_PIOA_PPUER = SW_MASK;
*AT91C_PIOA_IFER = SW_MASK;
while (1)
{
       Key_Val = *AT91C_PIOA_PDSR;//注:读I/O口电平时,需使能PIO的时钟控制器寄存器(AT91C_PMC_PCER)
        if (Key_Val & SW1)
        {
            *AT91C_PIOA_SODR = LED1;
         
        }
        else
        {
            *AT91C_PIOA_CODR = LED1;
             
        }
        
        if (Key_Val & SW2)
        {
            *AT91C_PIOA_SODR = LED2;
        }
        if (!(Key_Val & SW2))
        {
            *AT91C_PIOA_CODR = LED2;
        }
        
        if (Key_Val & SW3)
        {
            *AT91C_PIOA_SODR = LED3;
        }
        else
        {
            *AT91C_PIOA_CODR = LED3;
        }
        
        if (Key_Val & SW4)
        {
            *AT91C_PIOA_SODR = LED4;
        }
        else
        {
            *AT91C_PIOA_CODR = LED4;
        }
还有一个串口程序,我感觉是对,用串口调试工具收码就是没有!能否帮我看下原因吗?程序如下:

#include "AT91SAM7S64.h"
#include "Board.h"
#define RXRDY     (unsigned int) 0x1             //接收器准备好标志位,0为未接收到完整字符,1为接收器(US_RHR)有数据未被读取
#define TXRDY     ((unsigned int) 0x1 << 1)    //发送器准备好标志位,1为发送器(US_THR)内无数据
#define TXEMPTY ((unsigned int) 0x1 << 9)    //发送器空标志位,1为发送器(US_THR)内无数据,复位时或USART禁止时此位为0,发送使能命令(US_CR中)可以将其置位
unsigned char RBuff[256];
unsigned char index;
int main(void)
{
    unsigned int i;
    unsigned int delay;
    *AT91C_CKGR_MOR = 0x701;        //使能主振荡器和设置起振时间,可以检查CKGR_MCFR(0xfffffc20)进行确认
    *AT91C_PMC_MCKR = 0x01;            //选择Mster Clock is main clock divided by 0,Processor Clock is the Mster Clock
    *AT91C_PMC_PCKR = 0x11;
    *AT91C_PMC_SCER = 0x1;            //使能系统时钟寄存器的处理器时钟
    *AT91C_PMC_PCDR = 0xffffffff;    //禁止所有外围时钟
    *AT91C_PMC_PCER = 0x60;            //使能USART0时钟
    *AT91C_PIOA_PDR = US_RXD_PIN | US_TXD_PIN | US_RTS_PIN | US_CTS_PIN;//禁止该两个管脚的I/O口功能
    *AT91C_PIOA_ASR = US_RXD_PIN | US_TXD_PIN | US_RTS_PIN | US_CTS_PIN;//将该两个I/O口分配给外围A,即RXD0和TXD0
    *AT91C_US0_CR    = 0x10c;        //复位接收器和发送器,使能接收与发送,复位状态位
    *AT91C_US0_MR   = 0x000008c0;    //正常的UART模式,选择时钟为MCK,8位长度,无校验,1位停止位,
    *AT91C_US0_IDR  = 0xf3fff;        //禁止所有UART相关的中断
    *AT91C_US0_BRGR = 30;            //Baudrate = SelectedClock/(8(2-Over)CD) = MCK/16CD = 18432000/(16*30) = 38400
    //*AT91C_US0_CR   = 0x15c;
    *AT91C_US0_CR   = 0x50;            //使能发送与接收
    index = 0;
    *AT91C_US0_THR = 1;
    while (1)
    {
        
        for (i = 0; i < 256; i++)
        {
            if ((*AT91C_US0_CSR) & TXEMPTY)    //判断发送器是否为空
            {
                
                *AT91C_US0_THR = i;    //空,则发送数据
                
            }
            for (delay = 0; delay < 0xfff; delay++);
        }
        /if ((*AT91C_US0_CSR) & RXRDY)
        {
        //    RBuff[index++] = *AT91C_US0_RHR;
        }
    }
} 1: 怎么没有人回复呢?大家帮我看下好吗?程序问题

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]