www.mecatronicadegaragem.blogspot.com
Obse
rvaç
ão do
le
itor
mikroC PRO para PIC
Abril de 2009.
nota Reader's
AVISO LEGAL: mikroC PRO para PIC e este manual são de propriedade da mikroElektronika e estão protegidos pela lei de direitos autorais e tratados internacionais de direitos autorais. Portanto, você deve tratar deste manual como qualquer outro material protegido por direitos autorais (por exemplo, um livro). O manual eo compilador não pode ser copiado, parcial ou totalmente sem autorização escrita da mikroEelktronika. A PDF edição do manual pode ser impresso para uso privado ou local, mas não para distribuição. Modificando o manual ou o compilador é estritamente proibida.
ATIVIDADES DE ALTO RISCO: A mikroC PRO para PIC compilador não é tolerante a falhas e não foi projetado, fabricado ou destinado ao uso ou revenda como on-line de equipamentos de controle em ambientes perigosos protec- um desempenho sem falhas ing, como na operação de instalações nucleares, navegação de aeronaves ou comunicação sistemas de controle de tráfego aéreo, máquinas de suporte à vida, ou sistemas de armas, em que a falha do Software possa levar diretamente à morte, ferimentos pessoais ou grave danos físicos ou ambientais ("Atividades de Alto Risco"). mikroElektronika e seus fornecedores Declinamos qualquer garantia explícita ou implícita de adequação para Atividades de Alto Risco.
CONTRATO DE LICENÇA: Ao utilizar o mikroC PRO para PIC compilador, você concorda com os termos deste acordo. Somente uma pessoa pode usar a versão licenciada do mikroC PRO para PIC compilador de uma vez. Copyright © mikroElektronika 2003-2009.
Este manual cobre mikroC PRO para PIC versão 1.1 e os tópicos relacionados. versão mais recente- sões podem conter alterações sem aviso prévio.
Bug Reports compilador: O compilador foi cuidadosamente testado e depurado. É, no entanto, possível garantir um produto 100% livre de erros. Se você gostaria de relatar um bug, por favor entre em contato conosco o [email protected] endereço. Por favor, inclua as informações seguintes em seu relatório:
- Seu sistema operacional - Versão do mikroC PRO para PIC - Exemplo de código - Descrição de um bug
CONTATO EUA: mikroElektronika Voz: + 381 (11) 36 28 830 Fax: + 381 (11) 36 28 831 Web: www.mikroe.com E-mail: [email protected]
Windows é uma marca registada da A Microsoft Corp Todas as outras trocas e / ou marcas de serviços são de propriedade de seus respectivos proprietários.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdo
CAPÍTULO 1
CAPÍTULO 2
CAPÍTULO 3
CAPÍTULO 4
CAPÍTULO 5
CAPÍTULO 6
CAPÍTULO 7
Introdução mikroC PRO para PIC Meio Ambiente MikroICD (In Circuit Debugger) mikroC PRO para PIC Especificidades PIC Especificidades mikroC PRO para PIC Referência da Linguagem mikroC PRO para PIC Bibliotecas
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
CAPÍTULO 1
Características. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Por onde começar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
mikroElektronika Associates Declaração de Licença e Garantia Limitada. . . . . . . . . . . . 4 IMPORTANTE - LEIA COM ATENÇÃO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 GARANTIA LIMITADA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 ATIVIDADES DE ALTO RISCO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 DISPOSIÇÕES GERAIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Suporte Técnico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Como Registrar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Quem recebe a chave de licença. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Como obter a chave de licença. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Depois de receber a chave de licença. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
CAPÍTULO 2
Resumo IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Opções do menu principal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 File Menu de Opções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Opções do menu Editar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Encontrar o texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Substituir texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Localizar em arquivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Ir para a linha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 opção de expressões regulares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Opções do menu Exibir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Barras de ferramentas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Arquivo da Barra de Ferramentas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Barra de Edição. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Advanced Edit Toolbar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Localizar / Substituir Toolbar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Projeto barra de ferramentas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Construir Toolbar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Depurador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Estilos de Barra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Barra de Ferramentas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Menu de Opções do Projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Opções do menu Executar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Opções do menu Ferramentas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Ajuda Menu de Opções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Os atalhos de teclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Resumo IDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Personalizar Layout IDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Janelas de encaixe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Salvar Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
IV
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
Auto Hide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Avançado editor de código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Editor de recursos avançados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Código Assistente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Código Folding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Parâmetro Assistant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Modelos de Código (Auto Complete). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Correção automática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Verificador Ortográfico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Bookmarks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Linha Goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Comente / Descomente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Código Explorer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Lista de rotina. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Project Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Projeto Janela Configurações. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Library Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Erro janela. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Estatística. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Uso de memória do Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Uso de memória RAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 RAM locais utilizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Locais SFR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Uso de memória ROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Constantes Memória ROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Função Ordenado por Nome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Funções separadas pelo tamanho. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Funções Ordenado por endereços. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Funções Ordenado por Nome do Gráfico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Funções Ordenado por carta do tamanho. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Funções ordenadas por endereço Gráfico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Função Tree. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Memória Resumo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Editor de Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 As ferramentas integradas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
USART Terminal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 EEPROM Editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 ASCII Gráfico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Sete Converter segmento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 LCD caractere personalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 LCD Gráfico Editor de Bitmap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 HID Terminal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 UDP Terminal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Opções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Mikroelektronika - Soluções de software e hardware para o mundo embutido V
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Código editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Ferramentas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 As configurações de saída. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Expressões Regulares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Introdução. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Simples encontrados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Seqüências de escape. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Classes de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Metacaracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Metacaracteres - separadores de linha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Metacaracteres - classes pré-definidas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Exemplo:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Metacaracteres - Os limites de palavra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Metacaracteres - iteradores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Metacaracteres - Alternativas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Metacaracteres - Subexpressões. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Metacaracteres - Referências passadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
mikroC PRO para a PIC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Opções de linha de comando. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Projetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Novo Projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Assistente de Nova etapas do projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Projetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Novo Projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Assistente de Nova etapas do projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Personalizando Projetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Edit Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Gerenciar grupo de projecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Adicionar / Remover arquivos do projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Nível do projeto define:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Arquivos de origem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Gerenciando arquivos de origem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Criar novo arquivo de origem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Abrindo um arquivo existente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Imprimindo um arquivo aberto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Salvar arquivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Salvando arquivo com um nome diferente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 A fechar o ficheiro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Limpeza pasta do projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Compilação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Arquivos de saída. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Assembléia View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Mensagens de erro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Mensagens de erro do compilador:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
VI
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
Mensagens de aviso do compilador:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mensagens de erro vinculador:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Visão geral do software Simulator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Breakpoints Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Janela de Inspeção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exibir janela RAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cronômetro janela. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simulador de opções de software. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Criar nova biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Biblioteca de várias versões. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91 91 92 93 93 95 96 97 98 99
CAPÍTULO 3
mikroICD Debugger Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Exemplos mikroICD Debugger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 mikroICD (In-Circuit Debugger) Visão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Breakpoints Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Janela de Inspeção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 EEPROM janela de inspeção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Código Janela de Inspeção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 mikroICD Código Watch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Ver memória RAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Erros comuns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
mikroICD Advanced Breakpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Memória do Programa Break. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Memória do Programa Break. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Arquivo Registre-Break. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Emulador de Recursos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Pontos de Interrupção de Eventos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Cronômetro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
CAPÍTULO 4
Problemas padrão ANSI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Desvio da ANSI C padrão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Linguagem C Exstensions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Predefinidos Globais e constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 nível de projectos predefinidos define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Bits Acesso Individual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Bits Acesso Individual de variáveis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 tipo sbit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 tipo bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Interrupções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 prioridade interrompe P18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Chamadas de função de interrupção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Exemplos de interrupção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Mikroelektronika - Soluções de software e hardware para o mundo embutido
VII
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Directivas Linker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Directiva absoluta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 org directiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 orgall directiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 funcorg directiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Solicita função indireta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Criada em rotinas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Lo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Oi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Superior. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Maior. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Delay_us. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Delay_ms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Vdelay_ms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Delay_Cyc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Clock_Khz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Clock_Mhz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Get_Fosc_kHz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Otimização de Código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 dobrar Constant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 constante de propagação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Copie propagação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Relação de numeração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 "Código Dead" eliminação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Alocação de pilha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 otimização vars locais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Melhor geração de código e otimização local. . . . . . . . . . . . . . . . . . . . . . . . . . 131
CAPÍTULO 5
Tipos de Eficiência Energética. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Nested Solicita Limitações. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Especificidades PIC18FxxJxx. . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Endereço SFR compartilhados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Especificidades PIC16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Quebrando Pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Limites da abordagem indireta através da FSR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Tipo Especificadores de memória. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 rx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 SFR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
CAPÍTULO 6
Visão geral sobre elementos lexicais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
VIII Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
Espaço em branco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Espaço em branco em Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Linha de emenda com contrabarra (\). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Comentários. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 C comentários. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 C + + comentários. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 comentários aninhados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Tokens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Token Exemplo de extração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 As constantes inteiras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Long e sufixos Unsigned. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Decimais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Constantes hexadecimais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Constantes binário. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Constantes Octal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Floating Point Constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Constantes de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Sequências de Escape. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Desambiguação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Constantes String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Continuação de linha com barra invertida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Constantes Enumeration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Constantes ponteiro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Expressões constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Palavras-chave. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Identificadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Caso sensibilidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Singularidade e abrangência. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Exemplos Identifier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Pontuadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Colchetes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Parênteses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Suspensórios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Vírgula. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Ponto e vírgula. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Colon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Asterisk (Declaração Pointer). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Cadastre Libra (Directiva Preprocessor). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Objetos e declarações. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Lvalues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Rvalues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Mikroelektronika - Soluções de software e hardware para o mundo embutido
IX
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Escopo e visibilidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Escopo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Visibilidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Espaços de nome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Duração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Static Duração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Duração local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Categorias Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Tipos Fundamentais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Tipos de Aritmética. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Tipos Integral. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Tipos de ponto flutuante. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Enumerações. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Enumeração Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Anomous Tipo Enum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Enumeração Scope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Tipo void. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Funções Void. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Os ponteiros genéricos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Tipos derivados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Array Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Inicialização de matriz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Expressões n matrizes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Arrays multi-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Ponteiros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Declarações Pointer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Ponteiros nulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Ponteiros de função. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Atribuir um endereço para um ponteiro de função. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Aritmética de ponteiro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Matrizes e ponteiros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Atribuição e comparação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Ponteiro Adição. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Ponteiro Subtração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Estruturas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Estrutura da declaração e inicialização. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Declarações incompletas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Estruturas Untagged e TYPEDEFs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Trabalhando com Estruturas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Cessão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Tamanho da estrutura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Estruturas e funções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
X
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
Estrutura de Acesso ao Portal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Acessando estruturas aninhadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Estrutura de exclusividade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Sindicatos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Sindicatos Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Tamanho da união. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 União Acesso ao Portal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Campos de bits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Declaração de campos de bits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Acesso campos de bits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Tipo Conversões. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Conversões Standard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Detalhes:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Ponteiro de conversão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Concersions tipo explícito (conversão de tipo). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Declarações. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Declarações e definições. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Declarações e declarators. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 194 Linkage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Regras de Linkage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Linkage Regimento Interno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Linkage regras externas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Classes de armazenamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Auto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Registre-se. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Static. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Extern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Qualificação de tipo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Eliminatórias Const. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Qualificador volátil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Especificador typedef. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Declarações asm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Inicialização. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Inicialização automática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
funções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Função Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Protótipo de função. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Definição da função. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Function reentrância. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Chamadas de função e argumento de conversão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Chamadas de função. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Conversões Argumento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Operadores Presidence e Associativismo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Mikroelektronika - Soluções de software e hardware para o mundo embutido
XI
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Operadores aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Aritmética Binária Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Unários operadores aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Operadores relacionais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Visão geral sobre operadores relacionais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Operadores relacionais em expressões. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Operadores bit a bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Visão geral sobre operadores bit a bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Operações lógicas em nível de bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Shift Operadores bit a bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Bitwise versus lógica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Operadores lógicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Visão geral sobre operadores lógicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Operadores lógicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Expressões lógicas e efeitos colaterais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Lógico versus bit a bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Operador condicional? :. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Regras Operador condicional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Operadores de atribuição. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Simples operador de atribuição. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Operador de atribuição composto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Regras de atribuição. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Operador sizeof. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Sizeof Aplicada à Expressão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Sizeof Aplicada ao tipo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
expressão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Expressões vírgula. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
declarações. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Demonstrações rotulados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Demonstrações Expressão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Demonstrações de Seleção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Se a declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Instrução if aninhada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Demonstrações Switch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Switch aninhados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Instruções iteração (Loops). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Enquanto a Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Não Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Para a declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Ir instruções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Break e continue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Ruptura de Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Continue Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Goto Declaração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
XII
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
Instrução Return. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Declarações compostas (blocos). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
pré-processamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Directivas Preprocessor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Continuação de linha com contrabarra (\). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Definir Macros e Expansões Macro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Macros com parâmetros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Macros indefinida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Inclusão de arquivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Explícita Caminho. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Operadores Preprocessor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Operador #. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Operador # #. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Compilação condicional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Directivas # if, # elif, # Else e # endif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Directivas # ifdef e # ifndef. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
CAPÍTULO 7
Bibliotecas Hardware PIC-específicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Padrão ANSI C bibliotecas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Bibliotecas Diversos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Dependências da biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Bibliotecas de Hardware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Biblioteca ADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
ADC_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
CAN Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 CANSetOperationMode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 CANGetOperationMode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 CANInitialize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 CANSetBoudRate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 CANSetMask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 CANSetFilter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 CanRead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 CanWrite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Constantes CAN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 CAN_OP_MODE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 CAN_CONFIG_FLAGS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 CAN_TX_MSG_FLAGS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 CAN_RX_MSG_FLAGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 CAN_MASK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 CAN_FILTER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Mikroelektronika - Soluções de software e hardware para o mundo embutido
XIII
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Biblioteca CANSPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 das dependências externas de CANSPI Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 CANSPISetOperationMode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 CANSPIGetOperationMode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 CANSPIInitialize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 CANSPISetBaudRate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 CANSPISetMask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 CANSPISetFilter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 CANSPIRead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 CANSPIWrite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Constantes CANSPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 CANSPI_OP_MODE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 CANSPI_CONFIG_FLAGS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 CANSPI_TX_MSG_FLAGS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 CANSPI_RX_MSG_FLAGS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 CANSPI_MASK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 CANSPI_FILTER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Compact Flash Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Cf_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Cf_Detect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Cf_Enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Cf_Disable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Cf_Read_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Cf_Read_Byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Cf_Write_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Cf_Write_Byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Cf_Read_Sector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Cf_Write_Sector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Cf_Fat_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Cf_Fat_QuickFormat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Cf_Fat_Assign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Cf_Fat_Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Cf_Fat_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Cf_Fat_Rewrite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Cf_Fat_Append. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Cf_Fat_Delete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Cf_Fat_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Cf_Fat_Set_File_Date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
XIV
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
Cf_Fat_Set_File_Date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Cf_Fat_Set_File_Size. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Cf_Fat_Get_Swap_File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Biblioteca EEPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 EEPROM_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 EEPROM_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Ethernet PIC18FxxJ60 Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 família PIC18FxxJ60 do microcontrolador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Ethernet_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Ethernet_Enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Ethernet_Disable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Ethernet_doPacket. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Ethernet_putByte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Ethernet_putBytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Ethernet_putConstBytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Ethernet_putString. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Ethernet_putConstString. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Ethernet_getByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Ethernet_getBytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Ethernet_UserTCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Ethernet_UserUDP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Ethernet_getlpAddress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Ethernet_getGwlpAddress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Ethernet_getDnslpAddress ();. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Ethernet_getlpMask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 Ethernet_confNetwork. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 Ethernet_arpResolve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Ethernet_sendUDP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Ethernet_dnsResolve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Ethernet_initDHCL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Ethernet_doDHCPLeaseTime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Ethernet_renewDHCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Biblioteca Flash Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 FLASH_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 FLASH_Read_N_Bytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 FLASH_Write. . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 FLASH_Erase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
XV
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
FLASH_Erase_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
LCD Gráfico Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 As dependências externas do LCD Gráfico Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . 326 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Glcd_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Glcd_Set_Side. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Glcd_Set_X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Glcd_Set_Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Glcd_Read_Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Glcd_Write_Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Glcd_Fill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Glcd_Dot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Glcd_Line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Glcd_V_Line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Glcd_H_Line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Glcd_Rectangle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Glcd_Box. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Glcd_Circle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Glcd_Set_Font. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Glcd_Write_Char. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Glcd_Write_Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Glcd_Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
I ˛ Biblioteca C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 I2C1_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 I2C1_Start. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 I2C1_Repeated_Start. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 I2C1_Is_Idle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 I2C1_Rd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 I2C1_Wr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 I2C1_Stop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Biblioteca do teclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 As dependências externas do teclado Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Keypad_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Keypad_Key_Press. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Keypad_Key_Click. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Biblioteca de LCD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
XVI Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
As dependências externas do LCD Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Lcd_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Lcd_Out. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Lcd_Out_CP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Lcd_Chr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Lcd_Chr_Cp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Lcd_Cmd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Disponível Comandos LCD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 HW conexão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Manchester Biblioteca de código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 As dependências externas do Manchester Code Library. . . . . . . . . . . . . . . . . . . . . 359 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Man_Receive_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Man_Receive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Man_Send_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Man_Send. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Man_Synchro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Man_Break. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Exemplo de conexão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Multi Media Library Card. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Secure Digital Card. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 As dependências externas do MMC Library. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Mmc_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Mmc_Read_Sector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Mmc_Write_Sector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Mmc_Read_Cid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Mmc_Read_Csd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Mmc_Fat_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 Mmc_Fat_QuickFormat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Mmc_Fat_Assign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Mmc_Fat_Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 Mmc_Fat_Rewrite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 Mmc_Fat_Append. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 Mmc_Fat_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Mmc_Fat_Delete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Mmc_Fat_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Mmc_Fat_Set_File_Date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Mmc_Fat_Get_File_Date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Mmc_Fat_Get_File_Size. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Mmc_Fat_Get_Swap_File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Mikroelektronika - Soluções de software e hardware para o mundo embutido
XVII
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Biblioteca OneWire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Ow_Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Ow_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Ow_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Porto Biblioteca Expander. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 As dependências externas do Porto Expander Biblioteca. . . . . . . . . . . . . . . . . . . . . . . 389 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Expander_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Expander_Read_Byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Expander_Write_Byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Expander_Read_PortA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Expander_Read_PortB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Expander_Read_PortAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Expander_Write_PortA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Expander_Write_PortB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 Expander_Write_PortAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 Expander_Set_DirectionPortA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Expander_Set_DirectionPortB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Expander_Set_DirectionPortAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 Expander_Set_PullUpsPortA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 Expander_Set_PullUpsPortB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Expander_Set_PullUpsPortAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
PS / 2 Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 As dependências externas do PS / 2 Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Ps2_Config. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Ps2_Key_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Teclas de função. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Biblioteca PWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 PWM1_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 PWM1_Set_Duty. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 PWM1_Start. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 PWM1_Stop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
XVIII
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
RS-485 Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 As dependências externas da RS-485 Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 RS485Master_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 RS485Master_Receive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 RS485Master_Send. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 RS485slave_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 RS485slave_Receive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 RS485slave_Send. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Mensagem cálculos formato e CRC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Software I ˛ C Library. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 das dependências externas de Soft_I2C Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Soft_I2C_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Soft_I2C_Start. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Soft_I2C_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 Soft_I2C_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 Soft_I2C_Stop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Soft_I2C_Break. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Software Biblioteca SPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 As dependências externas de software SPI Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . 428 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Soft_Spi_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Soft_Spi_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 Soft_SPI_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Software Library UART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 Soft_UART_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 Soft_UART_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 Soft_UART_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 Soft_Uart_Break. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Biblioteca de som. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Sound_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Sound_Play. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Biblioteca SPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Mikroelektronika - Soluções de software e hardware para o mundo embutido
XIX
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 Spi_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 Spi1_Init_Advanced. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Spi1_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 Spi1_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 SPI_Set_Active. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Biblioteca SPI Ethernet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 As dependências externas do SPI Ethernet Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . 450 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 PIC16 e PIC18:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 Só PIC18: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 Spi_Ethernet_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 Spi_Ethernet_Enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 Spi_Ethernet_Disable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Spi_Ethernet_doPacket. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 Spi_Ethernet_putByte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Spi_Ethernet_putBytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Spi_Ethernet_putConstBytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 Spi_Ethernet_putString. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 Spi_Ethernet_putConstString. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 Spi_Ethernet_getByte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 Spi_Ethernet_getBytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Spi_Ethernet_UserTCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Spi_Ethernet_UserUDP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 SPI_Ethernet_getIpAddress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 SPI_Ethernet_getGwIpAddress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 SPI_Ethernet_getDnsIpAddress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 SPI_Ethernet_getIpMask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 SPI_Ethernet_confNetwork. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 SPI_Ethernet_arpResolve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 SPI_Ethernet_sendUDP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 SPI_Ethernet_dnsResolve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 SPI_Ethernet_initDHCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 SPI_Ethernet_doDHCPLeaseTime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 SPI_Ethernet_renewDHCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
Biblioteca SPI LCD gráfico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 As dependências externas do SPI LCD Gráfico Biblioteca. . . . . . . . . . . . . . . . . . . . . 479 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 Spi_Glcd_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 SPI_Glcd_Set_Side. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
XX
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
SPI_Glcd_Set_Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 SPI_Glcd_Set_X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 Spi_Glcd_Read_Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 SPI_Glcd_Write_Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 SPI_Glcd_Fill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 SPI_Glcd_Dot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 SPI_Glcd_Line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 SPI_Glcd_V_Line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 SPI_Glcd_H_Line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 SPI_Glcd_Rectangle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 SPI_Glcd_Box. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 SPI_Glcd_Circle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 SPI_Glcd_Set_Font. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Spi_Glcd_Write_Char. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 Spi_Glcd_Write_Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 Spi_Glcd_Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Biblioteca SPI LCD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 As dependências externas do SPI LCD Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 Spi_Lcd_Config. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Spi_Lcd_Out. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Spi_Lcd_Out_Cp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Spi_Lcd_Chr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Spi_Lcd_Chr_Cp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 Spi_Lcd_Cmd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 Disponível Comandos LCD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Conexão HW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
LCD8 SPI (interface de 8 bits) Library. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 As dependências externas do SPI LCD Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 Spi_Lcd8_Config. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 Spi_Lcd8_Out. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 Spi_Lcd8_Out_Cp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 Spi_Lcd8_Chr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 Spi_Lcd8_Chr_Cp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 Spi_Lcd8_Cmd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 Disponível Comandos LCD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Biblioteca SPI Gráfica T6963C LCD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 As dependências externas do SPI T6963C LCD Gráfico Biblioteca. . . . . . . . . . . . . . 507
Mikroelektronika - Soluções de software e hardware para o mundo embutido
XXI
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 Spi_T6963C_Config. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Spi_T6963C_WriteData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 pi_T6963C_WriteCommand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 Spi_T6963C_SetPtr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Spi_T6963C_WaitReady. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Spi_T6963C_Fill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Spi_T6963C_Dot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 Spi_T6963C_Write_Char. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 Spi_T6963C_write_Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 Spi_T6963C_line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 Spi_T6963C_rectangle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 Spi_T6963C_box. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 Spi_T6963C_circle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 Spi_T6963C_image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 Spi_T6963C_Sprite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 Spi_T6963C_set_cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Spi_T6963C_clearBit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Spi_T6963C_setBit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Spi_T6963C_negBit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 Spi_T6963C_DisplayGrPanel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 Spi_T6963C_displayTxtPanel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 Spi_T6963C_setGrPanel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 Spi_T6963C_setTxtPanel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 Spi_T6963C_panelFill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Spi_T6963C_GrFill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Spi_T6963C_txtFill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Spi_T6963C_cursor_height. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Spi_T6963C_graphics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Spi_T6963C_text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Spi_T6963C_cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 Spi_T6963C_cursor_blink. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
T6963C Biblioteca LCD gráfico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 As dependências externas da T6963C Biblioteca LCD gráfico. . . . . . . . . . . . . . . . . 530 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531 T6963C_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 T6963C_writeData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 T6963C_WriteCommand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 T6963C_SetPtr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 T6963C_waitReady. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 T6963C_fill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 T6963C_Dot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
XXII
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
T6963C_write_Char. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 T6963C_write_text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 T6963C_line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 T6963C_rectangle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 T6963C_box. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 T6963C_circle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 T6963C_image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 T6963C_sprite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 T6963C_set_cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 T6963C_clearBit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 T6963C_setBit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 T6963C_negBit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 T6963C_displayGrPanel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 T6963C_displayTxtPanel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 T6963C_setGrPanel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 T6963C_SetTxtPanel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 T6963C_PanelFill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 T6963C_grFill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 T6963C_txtFill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 T6963C_cursor_height. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 T6963C_Graphics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 T6963C_text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 T6963C_cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 T6963C_Cursor_Blink. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
Biblioteca UART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Uart_Init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 Uart_Data_Ready. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 UART1_Tx_Idle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 UART1_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 UART1_Read_Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 UART1_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 UART1_Write_Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 UART_Set_Active. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
USB HID Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Arquivo descritor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Hid_Enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 Hid_Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 id_Write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
Mikroelektronika - Soluções de software e hardware para o mundo embutido
XXIII
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
Hid_Disable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 HW Connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Padrão ANSI C bibliotecas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 ANSI C Library Ctype. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 Funções da Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 isalnum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 isalpha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 iscntrl. . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 isdigit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 isgraph. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 islower. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 ispunct. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 isspace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 isupper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 isxdigit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 toupper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 tolower. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 ANSI C biblioteca matemática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Funções da Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 acos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 asin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 atan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 atan2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 ceil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 cos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 cosh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 eval_poly. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 exp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 fabs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 chão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 frexp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 ldexp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 log. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 log10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 modf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 pow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 pecado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 sinh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 sqrt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 bronzeado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 tanh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 Biblioteca C ANSI stdlib. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 Funções da Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
XXIV
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
mikroC PRO para PIC
Tabela de Conteúdos
abs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 atof. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 atoi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 atol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 div. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 ldiv. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 uldiv. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 laboratórios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 máx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 min. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 rand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 srand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 xtoi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 Estruturas Div. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 ANSI C Biblioteca String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 Funções da Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 memchr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 memcmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 memcpy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 memmove. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 memset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 strcat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 strchr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 strcmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 strcpy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 strlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 strncat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 strncpy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 strspn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 trncmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 strstr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 strcspn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 strpbrk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 strrchr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Bibliotecas Diversos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 Biblioteca de botão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Biblioteca de conversões. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 ByteToStr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 ShortToStr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 WordToStr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 IntToStr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Mikroelektronika - Soluções de software e hardware para o mundo embutido
XXV
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdos
mikroC PRO para PIC
LongintToStr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 LongWordToStr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 FloatToStr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 Dec2Bcd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 Bcd2Dec16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 Dec2Bcd16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Biblioteca PrintOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 PrintOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
Biblioteca setjmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 Setjmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 Longjmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
Biblioteca de Sprint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 Funções. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 sprintf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 sprintl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 sprinti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Time Library. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 Time_dateToEpoch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 Time_epochToDate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 Time_dateDiff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 Exemplo de Biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Biblioteca Trigonometria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 Rotinas de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 sinE3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 cosE3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
XXVI
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
1
Introdução ao mikroC PRO para PIC
A mikroC PRO para PIC é uma poderosa ferramenta de desenvolvimento de recursos sofisticados para a PIC microcontroladores. Ele é projetado para fornecer ao programador a mais fácil pos- vel solução para desenvolvimento de aplicações para sistemas embarcados, sem compromis- ção de desempenho ou controle.
1
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1 Introdução mikroC PRO para PIC
mikroC PRO para PIC IDE PIC e C se encaixam bem: PIC é o mais popular chip de 8 bits do mundo, usado em uma ampla variedade de aplicações, e C, premiado por sua eficiência, é o natural escolha para o desenvolvimento de sistemas embarcados. mikroC PRO para PIC proporciona um bem-sucedido correspondência com IDE altamente avançado, compilador ANSI compatível, amplo conjunto de hard- ware bibliotecas, documentação completa, e abundância de exemplos prontos para correr. Características mikroC PRO para PIC permite que você rapidamente desenvolver e implantar aplicativos complexos:
Escreva seu código-fonte C usando o built-in editor de código (Code e Parâmetro Assistentes, código dobrando, Sintaxe Destacando, Auto Correct, Máscaras de Código, e muito mais.) Use incluídos mikroC PRO para PIC bibliotecas para acelerar drasticamente o desenvolvimento desenvolvimento: a aquisição de dados, memória, displays, conversões de comunicação, etc Monitore sua estrutura de programa, variáveis e funções do Code Explorer. Gere comentou, montagem legível, e compa-padrão HEX vel com todos os programadores. Use o mikroICD integrado (In-Circuit Debugger) em tempo real ferramenta de depuração para
www.mecatronicadegaragem.blogspot.com
2 Mikroelektronika - Soluções de software e hardware para o mundo embutidowww.mecatronicadegaragem.blogspot.com
CAPÍTULO 1
mikroC PRO para PIC Introdução
acompanhar a execução do programa no nível de hardware. fluxo de inspecionar o programa e depurar lógica executável com o software integrado Simulator. Obtenha relatórios detalhados e gráficos: mapa de memória RAM e ROM, as estatísticas de código, a montagem anúncio, chamando a árvore, e muito mais. mikroC PRO para PIC fornece inúmeros exemplos de expandir, desenvolver e utilizar como a construção de tijolos em seus projetos. Copie-as por completo, se acharem necessário- é por isso que Foram incluídos os com o compilador.
Por onde começar
No caso que você é um iniciante em programação de microcontroladores PIC, leia cuidado plenamente o PIC capítulo Específicos. Poderia dar-lhe algumas indicações úteis sobre PIC restrições, a portabilidade do código, e boas práticas de programação.
Se você é experiente em programação C, provavelmente você vai querer consultar mikroC PRO para PIC Especificidades primeiro. Por questões de idioma, você pode sempre se referem ao o global Language Reference. Uma lista completa de bibliotecas é incluído disponível em mikroC PRO PIC para Bibliotecas.
Se você não é muito experiente em programação C, não entre em pânico! mikroC PRO para PIC fornece inúmeros exemplos tornando mais fácil para você ir rapidamente. Nós sug rem que você primeiro consultar projetos e arquivos de origem e, em seguida iniciar a navegação na exemplos que você é o mais interessado em
Mikroelektronika - Softwares e soluçõe
www.mecatronicadegaragem.blogspot.com
s de hardware para Embedded World 3
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1 Introdução mikroC PRO para PIC
Mikroelektronika DECLARAÇÃO DE LICENÇA E ASSOCIADOS GARANTIA LIMITADA IMPORTANTE - LEIA ATENTAMENTE Esta licença declaração e garantia limitada constitui um contrato legal ("Licença Contrato ") entre você (como pessoa física ou jurídica) e mikroElek- tronika ("mikroElektronika Associates") para produtos de software ("Software"), identificado acima, incluindo qualquer software, mídia e acompanhamento on-line ou impresso docu- implementação. AO INSTALAR, COPIAR OU USAR O SOFTWARE, VOCÊ CONCORDA PARA SER OBRIGADO POR TODOS OS TERMOS E CONDIÇÕES DA LICENÇA ACORDO. Após a aceitação dos termos e condições do Contrato de Licença, mikroElektronika Associates lhe concede o direito de usar o software de uma forma prevista abaixo. Este Software é propriedade da mikroElektronika Associates e está protegido por cópia direito certo e tratado internacional de direitos autorais. Portanto, você deve tratar este software como qualquer outro material protegido por copyright (por exemplo, um livro). Você pode transferir o Software e documentação em uma base permanente prestado. Você não retenha nenhuma cópia eo recebedor concordar com os termos do Contrato de Licença. Exceto como previsto do Contrato de Licença, você não poderá transferir, alugar, arrendar, emprestar, copiar, modificar, traduzir, sublicenciar, compartilhar o tempo ou transmitir eletronicamente ou receber Software, mídia ou documentação. Você reconhece que o Software no forma de código-fonte é um segredo comercial do mikroElektronika Associates e, portanto, você concorda em não modificar o Software ou a tentativa de fazer engenharia reversa, descompilar, ou desmontar, exceto e somente na medida em que tal atividade seja expressamente permitida pela legislação aplicável não obstante esta limitação. Se você tiver adquirido uma versão de atualização do software, que constitui um único pro- duto com o software mikroElektronika Associates que você atualizou. Você pode usar a versão de atualização do Software apenas de acordo com Contrato de Licença.
4
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1
mikroC PRO para PIC Introdução
GARANTIA LIMITADA
Respeitosamente excetuando os Redistribuíveis, que são fornecidos "Como estão", sem guerra rantia de nenhum tipo, garante que o Software mikroElektronika Associates, uma vez actuali- ed e usados corretamente, irá executar substancialmente de acordo com o acom- ção, documentação e software de mídia estará livre de defeitos de materiais e obra, por um período de 90 (noventa) dias a contar da data de recebimento. Qualquer implícita garantias de Software são limitadas a 90 (noventa) dias.
mikroElektronika Associates ' e seus fornecedores inteira responsabilidade, e seu exclusivo recurso deverá ser, no mikroElektronika Associates ' opção, (a) a devolução do preço pago, ou (b) a reparação ou substituição do software que não atende mikroElektronika Associates ' Garantia Limitada e que seja devolvido a mikroElektronika Associates com uma cópia do recibo. Não devolva o produto até se ter "Sócios" Mikroelektronika PRIMEIRA e obteve um RETURN Número da autorização. Este Garantia limitada é nula se a falha do Software resultou de um acidente, abuso ou má utilização. Qualquer substituição de Software será garantido para o resto do período da garantia original ou 30 (trinta) dias, o que for maior.
AO MÁXIMO PERMITIDO POR LEI, Mikroelektronika ASSOCIADOS E SEUS FORNECEDORES REJEITAM TODAS OUTRAS GARANTIAS E CONDIÇÕES, EXPRESSA OU IMPLÍCITA, INCLUÍDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA, E NÃO-VIOLAÇÃO, NO QUE DIZ RESPEITO AO SOFTWARE E PRESTAÇÃO OU FALTA DE PRESTAÇÃO DE SERVIÇOS DE APOIO.
EM HIPÓTESE ALGUMA A Mikroelektronika ASSOCIADOS OU SEUS FORNECEDORES SER RESPONSÁVEL POR QUAISQUER DANOS, INCIDENTAIS OU CONSEQÜENCIAIS DANOS (INCLUINDO, SEM LIMITAÇÃO, DANOS POR PERDA DE LUCROS E INFORMAÇÃO DE NEGÓCIOS, NEGÓCIOS INTERRUPÇÃO OU QUALQUER OUTRA PERDA PECUNIÁRIA) DECORRENTES DO USO OU IMPOSSIBILIDADE DE UTILIZAÇÃO DO SOFTWARE OU PRESTAÇÃO DE OU NÃO PRESTAÇÃO DE SERVIÇOS DE APOIO, MESMO ASSOCIATES Mikroelektronika FOI AVISADO DA POSSIBILIDADE DE TAIS DANOS. EM QUALQUER CASO, ASSOCIATES Mikroelektronika ' TODA RESPONSABILIDADE EM QUALQUER PRESTAÇÃO DE LICENÇA SERÁ LIMITADA AO VALOR PAGO POR VOCÊ SOFTWARE FORNECIDO, entretanto, se você entrou A Associates Mikroelektronika CONTRATO DE SERVIÇOS DE APOIO, ASSOCIATES Mikroelektronika ' TODA A RESPONSABILIDADE SOBRE Serviços de apoio serão regidos pelos termos DESSA ACORDO.
Mikroelektronika - Soluções de software e hardware para o mundo embutido 5
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1 Introdução mikroC PRO para PIC
ATIVIDADES DE ALTO RISCO O software é não tolerantes a falhas e não foi projetado, fabricado ou destinado ao uso ou revenda como on-line de equipamentos de controle em ambientes perigosos que exijam prova de falhas desempenho, tais como na operação de instalações nucleares, navegação de aeronaves ou comunicação sistemas de controle de tráfego aéreo, máquinas de suporte à vida, ou armas sistemas, em que a falha do Software possa levar diretamente à morte, ferimentos pessoais, ou danos físicos ou ambientais graves ("Atividades de Alto Risco"). mikroElektron- ika Associados e seus fornecedores se isentam especificamente qualquer guerra, expressas ou implícitas, rantia de adequação para Atividades de Alto Risco. DISPOSIÇÕES GERAIS Essa declaração só pode ser modificado por escrito e assinado por você e uma autorização oficial- cer de mikroElektronika Associates. Se qualquer disposição desta declaração é considerada nula ou inexeqüível, o restante permanecerá válido e exeqüível de acordo com a sua termos. Se qualquer medida prevista é determinada como tendo falhado a sua finalidade essencial, todas as limitações de responsabilidade e exclusões dos danos previstos no GARANTIAS Limited- ty permanecerá em vigor. Esta afirmação lhe dá direitos legais específicos, você pode ter outros, que variam, de país para país. mikroElektronika Associates reserva todos os direitos não especificamente concedida nesta declaração. mikroElektronika Visegradska 1A, 11000 Belgrade, A Europa. Telefone: + 381 11 36 28 830 Fax: +381 11 36 28 831 Web: www.mikroe.com E-mail: [email protected]
6
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1
mikroC PRO para PIC Introdução
SUPORTE TÉCNICO
No caso de você encontrar qualquer problema, você é bem-vindo ao nosso fórum de suporte em www.mikroe.com/forum/. Aqui, você também pode encontrar informações úteis, dicas de hardware, prática e trechos de código. Seus comentários e sugestões sobre o futuro desenvolvi- mento do mikroC PRO para PIC são sempre apreciado - sinta-se livre para deixar uma nota ou dois na nossa lista de desejos.
Em nossa Base de Conhecimento www.mikroe.com/en/kb/ você pode encontrar as respostas a Fre- quentemente Perguntas e soluções para problemas conhecidos. Se você não consegue encontrar o solução para o problema na Base de Conhecimento em seguida, informar ao Posto de Apoio www.mikroe.com/en/support/. Desta forma, podemos gravar e rastrear bugs mais eficiente, o que é do nosso interesse mútuo. Nós respondemos a todos os relatórios de bugs e ques- ção de forma adequada, cada vez melhor o nosso suporte técnico.
Mikroelektronika - Soluções de software e hardware par
www.mecatronicadegaragem.blogspot.com
a o mundo embutido 7
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1 Introdução mikroC PRO para PIC
COMO SE INSCREVER A versão mais recente do mikroC PRO para PIC está sempre disponível para download em nosso site. É um software totalmente funcional bibliotecas, exemplos e compre- ajuda abrangente incluído. A única limitação da versão grátis é que ela não pode gerar a saída hexadecimal mais de 2 KB. Embora possa parecer restritivo, essa margem permite-lhe desenvolver práticas, aplicações de trabalho, sem pensar em limitar a demo. Se você pretende desenvolver realmente projetos complexos na mikroC PRO para PIC, então você deve considerar a possibili- dade de adquirir a chave de licença. Quem recebe a chave de licença Os compradores do mikroC PRO para PIC têm direito a chave de licença. Depois de ter completaram o procedimento de pagamento, você tem a opção de registar o seu mikroC PRO. Desta forma você pode gerar saída hexadecimal sem quaisquer limitações. Como obter a chave de licença Depois de ter concluído o procedimento de pagamento, inicie o programa. Selecione Ajuda > Como Registrar a partir do menu drop-down ou clique no ícone Como Registrar. Preencha o formulário de inscrição (figura abaixo), selecione o seu distribuidor, e clique no botão Enviar.
8
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1
mikroC PRO para PIC Introdução
Isto irá iniciar o seu cliente de e-mail com a mensagem pronta para ser enviada. Reveja as infor- informação que você entrou, e adicione o comentário se achar necessário. Por favor, não modificar a linha de assunto.
Ao receber e verificar o seu pedido, nós enviaremos a chave de licença para o e-mail endereço especificado no formulário.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
9
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1 Introdução mikroC PRO para PIC
Depois de receber a chave de licença A chave de licença vem como um pequeno arquivo autoextracting - apenas iniciá-lo em qualquer lugar sua computador para ativar sua cópia do compilador e remover o limite de demonstração. Você não precisa reiniciar seu computador ou instalar qualquer componente adicional. Além disso, não há necessidade de executar o mikroC PRO para PIC no momento da ativação. Notas:
A chave de licença é válida até que você formatar o disco rígido. No caso de precisar de esteira do disco rígido, você deve solicitar uma nova chave de ativação. Por favor, mantenha o programa de ativação em um lugar seguro. Toda vez que você atualizar o compilador você deve começar este programa novamente para reativar a licença.
10
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
2
mikroC PRO para PIC Meio Ambiente
O mikroC PRO para PIC é um ambiente amigável e intuitivo.
11
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Resumo IDE
O editor de código reguláveis Sintaxe Destacando, Código de dobradura, Código Adjunto, Assistente parâmetros, Auto Corrigir erros de digitação comuns e Tem Código placas (Auto Complete). O Code Explorer está à sua disposição para facilitar o gerenciamento do projeto. O Gerente de Projeto alows gerenciamento de projetos múltiplos configurações do projeto geral podem ser feitas na janela de configurações do projeto gerente de Biblioteca permite bibliotecas manuseio simples de ser usado em um projeto A janela de erro mostra todos os erros detectados durante a compilação e vinculação. A fonte de nível de software simulador permite depurar passo lógico executável-a- etapa, observando o fluxo do programa. O assistente para Novo projeto é uma maneira rápida, confiável e fácil maneira de criar um projeto. Arquivos de ajuda são de sintaxe e sensível ao contexto. Como em qualquer aplicação de Windows modernos, você pode personalizar o layout da mikroC PRO para PIC para atender às suas necessidades. Corretor ortográfico identificadores sublinha que são desconhecidos para o projeto. Desta forma, ele ajuda o programador a detectar potenciais problemas cedo, muito antes do proj A ECT é compilado. Corretor ortográfico pode ser desativado, escolhendo a opção na janela de Preferências (F12).
12
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
MENU PRINCIPAL OPÇÕES
As opções disponíveis do menu principal são:
Tópicos relacionados: Os atalhos de teclado
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
13
www.mecatronicadegaragem.blogspot.com
Arquivo Descrição
Abra uma nova janela do editor.
Abra o arquivo de origem para edição ou arquivo de i i li ã Reabrir ficheiro utilizado recentemente.
Salve as alterações para o editor ativo.
Salve o arquivo fonte ativa com os diferentes nome ou alterar o tipo de arquivo.
Feche o arquivo fonte ativa.
Visualização de Impressão.
Sair IDE.
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
FILE OPÇÕES O menu File é o principal ponto de entrada para a manipulação com os arquivos de origem. Tópicos relacionados: Os atalhos de teclado, Arquivo Barra, Fonte Gestão de Ficheiros
14
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Opções do menu Editar
Editar
Meio Ambiente
Descrição Desfazer última alteração. Refazer a última alteração. Recortar o texto selecionado para o clipboard. Copiar o texto selecionado para o clipboard. Colar o texto da prancheta. Deletar texto selecionado. Selecione todo o texto no editor ativo. Localizar texto em editor ativo. Localizar próxima ocorrência de texto no editor ativo. Localizar a ocorrência anterior do texto no editor ativo. Substitua o texto no editor ativo. Localizar texto em arquivo corrente, em todos os arquivos abertos,
ou em arquivos da pasta desejada. Saltar para a linha desejada no editor ativo. Advanced Código opções do Editor
Mikroelektronika - Soluções de software e hardware para o mundo embutido
15
www.mecatronicadegaragem.blogspot.com
Avançado » Descrição
Código de comentário selecionados ou colocados com linha-
h h l Descomente código selecionado ou remover única linha
á i h h l Recuo código selecionado.
Outdent código selecionado.
Alterações selecionada caso de texto em i ú l Alterações selecionada caso o texto em iú l Alterações selecionada caso de texto para
titl
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC Pesquisar Texto Caixa de diálogo para procurar o documento para o texto especificado. A busca é por- formado na direção especificada. Se a string não for encontrada uma mensagem é exibida.
16
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Substituir texto
Caixa de diálogo para a busca de uma seqüência de texto em arquivo e substituindo-a por outra cadeia de texto.
Localizar em arquivos
Caixa de diálogo para a busca de uma seqüência de texto no arquivo atual, todos os arquivos abertos, ou em arquivos em um disco.
A string a ser procurada é especificado no texto para encontrar campo. Se a pesquisa em diretórios opção é selecionado, os arquivos para busca estão especificados na máscara de arquivos e campos de Caminho.
Mikroelektronika - Soluções de software e hardware para o mundo embut
www.mecatronicadegaragem.blogspot.com
ido 17
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Ir para a linha Caixa de diálogo que permite ao usuário especificar o número da linha na que o cursor deve ser posicionado. opção de expressões regulares Ao marcar esta caixa, você será capaz de avançar em sua pesquisa, por meio de regular expressões. Tópicos relacionados: Os atalhos de teclado, Barra de Edição, Edição Avançada Barra de ferramentas
18
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Arquivo Descrição
Mostrar barras de ferramentas / Hide.
Mostrar / Esconder as janelas de depuração.
Show / Hide Lista de rotina em editor ativo.
Show / Hide janela Project Settings.
Show / Hide Código do Windows Explorer.
Show / Hide janela Project Manager.
Show / Hide Library Manager.
Mostrar / ocultar janela de favoritos.
Show / Hide Erro janela Mensagens.
Mostrar / ocultar janela do Editor de Macro.
Mostrar a janela da Lista de Janelas.
CAPÍTULO 2
mikroC PRO para PIC
Menu Opções de visualização
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
19
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
Abre uma nova janela do editor.
Abra o arquivo de origem para edição ou arquivo de imagem para i li ã
Salve as alterações para a janela ativa.
Salvar alterações em todas as janelas abertas.
Feche o editor atual.
Feche todas as editores.
Visualização de Impressão.
Ícone Descrição
Desfazer última alteração.
Refazer a última alteração.
Recortar o texto selecionado para o clipboard.
Copiar o texto selecionado para o clipboard.
Colar o texto da prancheta.
CAPÍTULO 2 Meio Ambiente
BARRAS Arquivo da Barra de Ferramentas Arquivo Toolbar é uma barra de ferramentas padrão, com as seguintes opções: Edit Toolbar Edit Toolbar é uma barra de ferramentas padrão, com as seguintes opções:
mikroC PRO para PIC
20
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
Comentar o código selecionado ou colocar comentário de linha única, se não h h l ã Descomente código selecionado ou remover o comentário de linha única, se houver
h l Selecione o texto de partida para acabar com delimitador delimitador.
Ir para acabar com delimitador.
Vá para a linha.
Recuo selecionados linhas de código.
Outdent selecionados linhas de código.
Gerar o código HTML apropriado para publicar código fonte de corrente em
Ícone Descrição
Localizar texto na atual editor.
Localizar a próxima ocorrência.
Encontrar ocorrência anterior.
Substitua texto.
Localizar texto em arquivos.
CAPÍTULO 2
mikroC PRO para PIC
Edição Avançada Barra
Advanced Edit Toolbar vem com as seguintes opções:
Localizar / Substituir Barra
Localizar / Substituir Toolbar é uma barra de ferramentas padrão, com as seguintes opções:
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
21
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
Novo projeto
Projeto Open
Save Project
Fechar projeto atual.
Editar configurações do projeto.
Adicionar projecto existente ao projeto do grupo.
Remover projeto existente do grupo do projeto.
Add File To Project
Remover o arquivo de projeto
Ícone Descrição
Criar o projeto atual.
Construir todos os projetos abertos.
Construir e projeto de programa ativo.
Iniciar programador e carga arquivo HEX atual.
Abrir código assembly no editor.
Abra lisitng arquivo no editor.
Ver estatísticas para o projeto atual.
CAPÍTULO 2 Meio Ambiente
Projeto Barra Projeto Barra vem com as seguintes opções: Construir Toolbar Construir Toolbar vem com as seguintes opções:
mikroC PRO para PIC
22
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
Iniciar Software Simulator ou mikroICD (In-Circuit Debugger).
Executar / Pausar depurador.
Parar depurador.
Step Into.
Passe por cima.
Saia.
Executar até o cursor.
Alternar ponto de interrupção.
breakpoints Toggle.
Limpar os pontos de interrupção.
Exibir janela de observação
Exibir janela cronômetro
CAPÍTULO 2
mikroC PRO para PIC
Depurador
Depurador Toolbar vem com as seguintes opções:
Estilos de Barra
Estilos da barra de ferramentas permite que você facilmente personalizar o seu espaço de trabalho.
Meio Ambiente
Mikroelektronika - Softwares e soluções de hardware para Embedded World
23
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
Executar Terminal USART
EEPROM
ASCII Gráfico
Sete ferramenta decodificador segmento.
menu Opções
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Barra de Ferramentas Barra de Ferramentas vem com seguintes opções padrão: A barra de ferramentas podem ser facilmente personalizados, adicionando novas ferramentas em Opções (F12) janela. Tópicos relacionados: Os atalhos de teclado, integrada Ferramentas, depurador do Windows
24
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
PROJETO MENU OPÇÕES
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
25
www.mecatronicadegaragem.blogspot.com
Projeto Descrição
Criar o projeto ativo.
Construir todos os projetos.
Construir e programa de projeto ativo.
Exibir Assembléia.
Editar caminhos de pesquisa.
Pasta do Projeto Limpeza
Adicionar arquivo ao projeto.
Remover arquivo de projeto.
Projetos de importação de versões anteriores do ik C Abra o Assistente de Novo projeto
Abrir projeto já existente.
Salvar atual projeto.
Editar as configurações do projeto
Abra grupo de projeto.
Fechar grupo de projeto.
Salve o arquivo de projeto ativo com o nome dif t Aberto recentemente utilizadas projeto.
Fechar projeto ativo.
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC Tópicos relacionados: Os atalhos de teclado, o Projeto Barra, criando novos Projeto, Projeto Manager, as configurações do projeto
26
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Executar Descrição
Iniciar Software Simulator ou mikroICD (In- Circuit Debugger).
Parar depurador.
Pausa Debugger.
Step Into.
Step Over.
Step Out.
Ir para interrupção em projeto atual.
Alternar ponto de interrupção.
Breakpoints.
Breakpoints Clear.
Mostrar / Esconder Janela de Inspeção
Show / Hide Window Cronómetro
Alternar entre Pascal fonte e desmon- assembléia.
CAPÍTULO 2
mikroC PRO para PIC
MENU OPÇÕES RUN
Tópicos relacionados: Os atalhos de teclado, barra de ferramentas Debug
Meio Ambiente
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
27
www.mecatronicadegaragem.blogspot.com
Ferramentas Descrição
Executar mikroElektronika Programador
Executar Terminal USART
Execute o Editor do EEPROM
Executar tabela ASCII
Executar Converter display de 7
Gerar o código HTML apropriado para publicação ódi f b Executar Lcd caráter personalizado.
Execute o editor bitmap GLCD.
Executar HID Terminal.
Executar terminal de comunicação UDP.
Executar mikroBootloader.
Abra a janela Opções.
CAPÍTULO 2 Meio Ambiente
Menu Ferramentas Opções Tópicos relacionados: Os atalhos de teclado, Barra de Ferramentas
mikroC PRO para PIC
28
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
Ajuda Descrição
Abrir arquivo de ajuda.
Open Document migração de código.
Verifique se a versão do compilador novo tá di í l mikroElektronika Open Forum de Suporte
em d d Abra mikroElektronika Página da Web em
um Informações sobre como se inscrever
Abra a janela Sobre.
CAPÍTULO 2
mikroC PRO para PIC
HELP OPÇÕES
Tópicos relacionados: Os atalhos de teclado
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
29
www.mecatronicadegaragem.blogspot.com
Ctrl + Shift + S Salvar tudo
Ctrl + V Colar
Ctrl + X Corte
Ctrl + Y Excluir linha inteira
Ctrl + Z Desfazer
Ctrl + Shift + Z Refazer
Editor Atalhos avançada
Ctrl + Espaço Código Assistente
Ctrl + Shift + S
Parâmetros de Assistente
Ctrl + D Encontrar declaração
Ctrl + E Pesquisa incremental
Ctrl + L Lista de rotina
Ctrl + G linha Goto
Ctrl + J Inserir Código Modelo
Ctrl + Shift +. Comentar Código
Ctrl + Shift +, Descomente Código
Ctrl + número marcador Goto
Ctrl + Shift + ú
marcador definido
Ctrl + Shift + I Recuo seleção
Ctrl + Shift + U Unindent selecção
TAB Recuo seleção
Shift + TAB seleção Unindent
Alt + Seleção Selecionar colunas
Ctrl + Alt + S l ã
Selecionar colunas
Ctrl + Alt + L Converter a seleção para minúsculas
Ctrl + Alt + U Converter a seleção para maiúsculas
Ctrl + Alt + T Converter em titlecase
IDE Atalhos
F1 Ajuda
Ctrl + N Nova Unidade
Ctrl + O Abrir
Ctrl + Shift + O
Projeto Open
Ctrl + Shift + N
Novo projeto
Ctrl + K Encerrar o projeto
Ctrl + F4 Fechar Unidade
Ctr + Shift + E
Edit Project
Ctrl + F9 Construir
Shift + F9 Build All
Ctrl + F11 Construir e programar
Shift + F4 Ver Breakpoints
Ctrl + Shift + F5
Limpar os pontos de i t ã F11 Start me Programador
Ctrl + Shift + F1
Gerente de Projetos
F12 Opções
Alt + X Fechar mikroC PRO para PIC
Editor Atalhos Basic
F3 Localizar, Localizar próxima
Shift + F3 Procurar o Anterior
Alt + F3 Pesquisa Grep, em arquivos
Ctrl + A Selecionar Tudo
Ctrl + C Cópia
Ctrl + F Pesquisar
Ctrl + R Substituir
Ctrl + P Imprimir
Ctrl + S Salvar unidade
CAPÍTULO 2 Meio Ambiente mikroC PRO para PIC
ATALHOS DE TECLADO Abaixo está uma lista completa de atalhos de teclado disponíveis no mikroC PRO para PIC IDE.
30
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
mikroICD Debugger e Software Simulador de Atalhos
F2 Ir para interrupção
F4 Executar até o cursor
F5 Alternar ponto de interrupção
F6 Execute o depurador Pausa /
F7 Etapa em
F8 Passe por cima
F9 Depurar
Ctrl + F2 Parar Debugger
Ctrl + F5 Add to watch list
Ctrl + F8 Saia
Alt + D DESMONTAGEM Vista
Shift + F5 Abrir a janela Watch
Ctrl + Shift + A Show Advanced Breakpoints
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
31
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
IDE GERAL A mikroC PRO para PIC é um ambiente amigável e intuitivo:
O editor de código reguláveis Sintaxe Destacar, código dobrando, Código Adjunto, Assistente parâmetros, Auto Corrigir erros de digitação comuns e Tem Código placas (Auto Complete). O Code Explorer está à sua disposição para facilitar o gerenciamento do projeto. O Gerente de Projeto alows gerenciamento de projetos múltiplos configurações do projeto geral podem ser feitas na janela de configurações do projeto gerente de Biblioteca permite bibliotecas manuseio simples de ser usado em um projeto A janela de erro mostra todos os erros detectados durante a compilação e vinculação. A fonte de nível de software simulador permite depurar passo lógico executável-a- etapa, observando o fluxo do programa. O assistente para Novo projeto é uma maneira rápida, confiável e fácil maneira de criar um projeto. Arquivos de ajuda são de sintaxe e sensível ao contexto. Como em qualquer aplicação de Windows modernos, você pode personalizar o layout do mikroC PRO para PIC para atender às suas necessidades. sublinha Spell Checker identificadores que são desconhecidos para o projeto. Desta forma, ele ajuda o programador a detectar potenciais problemas cedo, muito antes do pro- A ECT é compilado. Corretor ortográfico pode ser desativado, escolhendo a opção na Diálogo Preferências (F12).
32
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
PERSONALIZAÇÃO LAYOUT IDE
Docking Windows
Você pode aumentar a visualização e edição espaço para o código, dependendo de como você organizar as janelas no IDE.
Passo 1: Clique na janela que você deseja encaixar, dar-lhe o foco.
Passo 2: Arraste a janela de ferramentas do seu local atual. Um losango guia é exibida. As quatro setas do ponto de diamante para os quatro cantos do IDE.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
33
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Passo 3: Mova o ponteiro sobre a parte correspondente do losango guia. Um contorno da janela aparece na a área designada. Passo 4: Para encaixar a janela na posição indicada, solte o botão do mouse. Dica: Para mover uma janela acoplável sem rotura no lugar, pressione CTRL enquanto arrastando-o. Salvar Layout Depois de ter um layout de janela que você gosta, você pode salvar o layout, digitando o nome para o layout e pressionando o ícone Save Layout .
Para definir o layout, selecione o layout desejado na lista suspensa Layout e clique em
Definir o ícone Layout .
Para remover o layout a partir da lista drop-down, selecione o layout desejado na lista
e clique no botão Excluir Icon Layout .
34
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Auto Ocultar
Auto Esconder "permite ver mais do seu código de uma vez por minimizando ferramenta ganha- dows ao longo das bordas do IDE quando não estiver em uso.
Clique na janela que deseja manter visível a dar-lhe o foco. Clique no ícone de alfinete na barra de título da janela.
.
Quando uma janela auto-ocultos perde o foco, ele automaticamente slides de volta ao seu guia na a borda da IDE. Enquanto uma janela é auto-oculto, seu nome eo ícone são visíveis em uma guia na borda do IDE. Para exibir um auto-ocultos janela, mova o ponto- er sobre a guia. A janela desliza para trás para ver e está pronto para uso.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
35
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Editor avançado de código O editor de código é um editor de texto avançado moda para satisfazer as necessidades dos profissionais. Geral edição do código é o mesmo que trabalhar com qualquer editor de texto padrão, incluindo familiar Copiar, Colar e Desfazer ações, comum para o ambiente Windows. Editor de recursos avançados
Ajustável Realce de Sintaxe Código Assistente Código Folding Parâmetro Assistente Modelos de Código (Auto Complete) Correção automática de erros de digitação comuns Verificador Ortográfico Marcadores e Goto Line Comente / Descomente
Você pode configurar o destaque da sintaxe, modelos de código e Auto Correto Editor de diálogo Configurações. Para acessar as configurações, clique em Ferramentas > Opções da menu drop-down, clique no botão Mostrar Ícone Opções ou a tecla F12 imprensa.
36
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Código Assistente
Se você digitar as primeiras letras de uma palavra e pressione Ctrl + Espaço, todas válidas iden- tifiers coincidindo com as letras que você digitou será solicitado em um painel flutuante (veja a imagem abaixo). Agora você pode continuar digitando para estreitar a escolha, ou você pode selecionar um da lista usando as setas do teclado e Enter.
Código Folding
dobramento de código é IDE recurso que permite aos usuários ocultar ou exibir sec- ções de um arquivo de origem. Desta forma é mais fácil de gerenciar grandes regiões de código dentro uma janela, enquanto a visualização apenas as subsecções do código que são relevantes durante uma sessão de edição especial.
Ao digitar, o símbolo de dobragem de código (- e +) aparecerá automaticamente. Use a dobra- ção de símbolos para ocultar / mostrar as subseções código.
Se você colocar o cursor do mouse sobre a dica da caixa, o texto recolhido será mostrado na uma caixa de dica de estilo.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
37
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC Parâmetro Assistente O Assistente de parâmetro será invocado automaticamente quando você abre parênteses "(" ou pressione Shift + Ctrl + Espaço. Se o nome de uma função válida precede o paren- tese, em seguida, os parâmetros esperados serão exibidos em um painel flutuante. Como você digite o parâmetro real, o próximo parâmetro esperado ficará em negrito. Modelos de Código (Auto Complete) Você pode inserir o modelo de código, digitando o nome do modelo (por exemplo, whiles), em seguida, pressione Ctrl + J eo editor de código irá gerar automaticamente um código. Você pode adicionar seu modelos próprios para a lista. Selecione Ferramentas > Opções no menu drop-down menu, ou clique no botão Mostrar Ícone Opções e selecione a guia Auto Completar. Aqui você pode digitar o apropriado palavra-chave, descrição e código do seu template. macros Autocomplete pode sistema e recuperar informações sobre o projeto:
- - - - -
% DATE% - Data atual do sistema %% TIME - Hora atual do sistema %% DISPOSITIVO - Nome do dispositivo (MCU), conforme especificado nas configurações do projeto %% DEVICE_CLOCK - Relógio, conforme especificado no projeto definições %% COMPILER - Compilador versão atual
38
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Essas macros podem ser usados no código do modelo, ver modelo ptemplate fornecido com mikroC PRO para PIC instalação.
Correção automática
O recurso Auto Correct corrige erros comuns de digitação. Para acessar a lista de rec- erros reconhecida, selecione Ferramentas > Opções a partir de No menu drop-down, ou clique
no botão Mostrar
Ícone Opções e selecione a guia Autocorreção. Você também pode adicionar os seus
próprios
preferências para a lista.
Além disso, o editor de código tem um recurso para comentar ou descomente o código selecionado pelo sim- plo de um clique do mouse, utilizando o ícone
comentar
e Icon Descomente a partir de
Barra de ferramentas de código.
Verificador Ortográfico
O verificador ortográfico sublinha desconhecido objetos no código, para que eles possam ser facilmente notado e corrigido antes de compilar o seu projeto.
Selecione Ferramentas > Opções a partir do menu drop-down, ou clique no ícone Mostrar opções
e, em seguida, selecione a aba Verificador Ortográfico.
Bookmarks
Bookmarks tornar a navegação através de um código grande mais fácil. Para definir um marcador, utilize Ctrl + Shift + número. Para saltar para um marcador, utilize Ctrl + número.
Goto Line
A opção Goto Line torna a navegação através de um código grande mais fácil. Use a curto corte Ctrl + G para ativar essa opção.
Comentário / Descomente
Além disso, o editor de código tem um recurso para comentar ou descomentar selecionado código simples clique de um mouse, utilizando o ícone comentar e inco-
www.mecatronicadegaragem.blogspot.com
mento Icon do Código de Barra.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
39
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
Expandir / Recolher todos os nós da árvore.
Localize declaração no código.
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Explorador de código O Code Explorer dá visão clara de cada item declaradas dentro do código fonte. Você pode saltar a uma declaração de qualquer item pelo botão direito dele. Além disso, além da lista de objetos definidos e declarados, código de explorer exibe mensagem de erro sobre a primeira e sua localização no código. As seguintes opções estão disponíveis no Gerenciador de Código:
40
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
LISTA DE ROTINA
lista de rotina diplays lista de rotinas, e permite que as rotinas de filtragem por nome. Rotina janela da lista pode ser acessada pressionando Ctrl + L.
Você pode saltar para uma rotina desejado, clicando duas vezes nele.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
41
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
GERENTE DE PROJETOS Project Manager for IDE recurso que permite aos usuários gerenciar múltiplos projetos. Vários projetos que juntos formam grupo de projeto pode ser aberto ao mesmo tempo. Apenas um deles pode estar ativo no momento. Definição do projeto em ativos modalidade é realizada por duplo clique sobre o projeto desejado no Project Manager. Na sequência opções estão disponíveis no Project Manager:
42
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
Salvar projeto do Grupo.
Abra grupo de projeto.
Feche o projeto ativo.
Fechar grupo de projeto.
Adicione projeto para o grupo de projeto.
Retire do projeto grupo de projeto.
Adicionar arquivo ao projeto ativo.
Remover arquivos selecionados a partir do projeto.
Construir o projeto ativo.
programador executar mikroElektronika do Flash.
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Para obter detalhes sobre como adicionar e remover arquivos projeto consulte Adicionar / Remover arquivos de Projeto.
Tópicos relacionados: Configurações do projeto, o Project Menu de Opções, Opções do menu File, Project Toolbar, barra de ferramentas Build, Adicionar / Remover arquivos do Project
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
43
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
PROJETO DE JANELA DE CONFIGURAÇÃO As seguintes opções estão disponíveis nas configurações do projeto Janela:
Dispositivo - selecionar o dispositivo apropriado na lista de dispositivos drop-down. Oscilador - digite o valor da freqüência do oscilador. Construir / Debugger Tipo - escolha depurador tipo.
Tópicos relacionados: Edit Project, Personalizando Projetos
44
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Gerenciador de bibliotecas
Library Manager permite que as bibliotecas manuseio simples sendo usado em um projeto. Biblioteca janela do Gerenciador de listas de todas as bibliotecas (extencion. MCL), que são instantaneamente armazenados no Usa pasta do compilador. A biblioteca desejável é adicionado ao projeto, selecionando seleção caixa ao lado do nome da biblioteca. Para ter todas as funções de biblioteca acessível, basta pressionar o botão Confira todas as
e todas as bibliotecas serão selecionadas. No caso de nenhuma biblioteca é necessária em um projeto,
pressione o botão Limpar tudo e todas as bibliotecas serão apurados a partir do projeto. Somente as bibliotecas selecionadas serão ligadas.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
45
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
Atualizar Biblioteca de verificação de arquivos em "Usos" pasta. Útil quando novos bibli di i d i d i " " Reconstruir todas as bibliotecas disponíveis. Útil quando fontes da biblioteca estão disponíveis e
id d d f t Inclui todas as bibliotecas disponíveis no projeto atual.
Nenhuma biblioteca da lista serão incluídos no projeto atual.
Restauração da biblioteca para o estado apenas antes de salvar último j t
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC tópicos relacionados: mikroC PRO para PIC Bibliotecas, Criação de um novo Biblioteca
46
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
ERRO JANELA
No caso em que foram encontrados erros durante a compilação, o compilador vai relatá-los e não irá gerar um arquivo hex. A janela de erro será solicitado na parte inferior da Na janela principal por padrão.
A janela de erro está localizado no separador Mensagem, e mostra a localização eo tipo de erros, o compilador encontrou. O compilador também relata advertências, mas estas não afetam a saída, os erros só pode interefere com a geração de hex.
Dê um duplo clique na linha da mensagem na janela de erro para destacar a linha onde o erro foi encontrado.
Temas relacionados: Mensagens de erro
Mikroelektronika - Soluções de software e hardware para o mundo embutido
47
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
ESTATÍSTICAS Após a compilação com sucesso, você poderá analisar estatísticas de seu código. Clique no Estatísti- tiques Icon . Uso o Windows Memory Fornece uma visão geral de RAM e ROM uso nas diversas formas. Uso de memória RAM Exibe uso da memória RAM de uma forma torta-like.
48
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
RAM locais utilizados Exibe usados locais de memória RAM e seus nomes.
SFR Locais Exibe uma lista de utilizados SFR locais.
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
49
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
Uso de memória ROM ROM Exibe o uso do espaço de memória em forma de pizza-like. Memória ROM Constantes Exibe constantes memória ROM e seus endereços.
mikroC PRO para PIC
50
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Função ordenados por nome Classifica e exibe funções por seus endereços, nomes simbólicos, e único nomes assembler.
Funções ordenados por tamanho Classifica e exibe funções, pela sua dimensão, na ordem ascendente.
Mikroelektronika - Software e Soluções de hardware para Embedded World
51
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Funções Ordenado por Endereços Classifica e mostra por suas funções endereços, em ordem crescente. Funções Ordenado por Nome do Quadro Classifica e exibe funções por seus nomes em um formato gráfico semelhante.
52
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Funções Ordenado por Gráfico Tamanho Classifica e exibe funções por seus tamanhos em um formato gráfico semelhante.
Funções ordenadas por endereço Gráfico Classifica e exibe funções por seus endereços em um formato gráfico semelhante.
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
53
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
Função Árvore Exibe Função Árvore com os dados relevantes para cada função. Memória Resumo Apresenta resumo de memória RAM e memória ROM de forma torta-like.
mikroC PRO para PIC
54
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Ícone Descrição
teclas "gravação" começa para posterior reprodução.
Pára keystrokesthat captura começou quando o Start com Recordig- mando foi selecionado.
Permite uma macro que foi gravada para ser repetidos.
Novo macro.
Excluir macro.
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Editor de Macros
A macro é uma série de teclas que foram "gravadas" na ordem executada. Uma macro permite "gravar" uma série de teclas e depois em 'playback', ou repetir, as teclas gravadas.
A Macro oferece os seguintes comandos:
Tópicos Relacionados: Avançado editor de código, modelos de código
Mikroelektronika - Soluções de software e hardware para o mundo embutido
55
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Ferramentas integradas USART Terminal A mikroC PRO para PIC inclui o terminal de comunicação USART para RS232 de comunicação. Você pode iniciar a partir do menu drop-down Ferramentas > Termi-USART nal ou clicando no ícone Terminal USART da barra de ferramentas.
56
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
EEPROM Editor
O Editor é usado EEPROM para manipulação de memória EEPROM MCU. Você pode lançá-lo a partir do menu drop-down Ferramentas > EEPROM Editor. Quando Utilize este definição EEPROM está marcada compilador gerará Intel hex project_name.ihex que contém dados a partir do editor EEPROM.
Quando você executa programador de software mikroElektronika mikroC PRO para PIC IDE - project_name.hex arquivo será carregado automaticamente durante a IHEX arquivo deve ser carregado manualmente.
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
57
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
ASCII Gráfico A tabela ASCII é uma ferramenta útil, particularmente útil quando se trabalha com display LCD. Você pode iniciá-lo a partir do menu drop-down Ferramentas > tabela ASCII ou clicando no Ver Icon tabela ASCII da barra de ferramentas.
58
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Sete Converter Segmento
Os sete segmentos Converter é um painel visual conveniente que retorna / valor decimal hexadecimal para qualquer combinação viável que você gostaria de exibir em 7seg. Clique sobre as peças, de 7 de imagem do segmento para obter o valor solicitado na caixas de edição. Você pode iniciar a partir do menu drop-down Ferramentas > 7 Segmento Converter ou por clicando no ícone Sete Segmento Converter da barra de ferramentas.
LCD caractere personalizado
mikroC PRO para PIC inclui o Custom Lcd caracteres. A saída é mikroC PRO para PIC código compatível. Você pode iniciar a partir do menu drop-down Ferramentas > Cus LCD Tom de caracteres.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
59
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
LCD Gráfico Editor de Bitmap A mikroC PRO para PIC inclui o gráfico LCD Bitmap Editor. A saída é o mikroC PRO para PIC código compatível. Você pode iniciar a partir do menu drop-down Ferramentas > GLCD Editor de Bitmap.
60
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
HID Terminal
A mikroC PRO para PIC inclui o terminal de comunicação para HID USB comu- cação. Você pode iniciar a partir do menu drop-down Ferramentas > HID Terminal.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
61
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente mikroC PRO para PIC
UDP Terminal A mikroC PRO para PIC inclui o Terminal UDP. Você pode iniciá-lo na menu drop-down Ferramentas > UDP Terminal.
62
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
mikroBootloader
(De AN732 Microchip documento) A família de PIC16F87X microcontroladores tem a habilidade de escrever à sua memória próprio programa. Este recurso permite um arranque de pequenas programa gerenciador de receber e gravar um novo firmware na memória. Na sua mais simples formulário, o gestor de arranque começa o código de usuário em execução, salvo se considerar que o novo firmware deve ser baixado. Se houver um novo firmware a ser baixado, ele recebe os dados e grava-lo em memória do programa. Há muitas variações e FEA-suplementar estruturas que podem ser adicionadas para melhorar a confiabilidade e simplificar a utilização do gerenciador de inicialização.
Nota: mikroBootloader só pode ser usado com microcontroladores PIC que piscam apoio escrever.
Como usar mikroBootloader?
1. Coloque o PIC com o arquivo hexadecimal apropriado usando a programação convencional
técnicas (por exemplo, para usar PIC16F877A p16f877a.hex). 2. mikroBootloader Iniciar a partir do menu drop-down Ferramentas > Bootoader. 3. Clique em Configuração da Porta e selecione a porta COM que será utilizada. Certifique-se que
BAUD é definida para 9600 Kpbs. 4. Clique em Abrir Arquivo e selecione o arquivo HEX que você gostaria de carregar. 5. Desde o bootcode no PIC só dá o computador 4-5 segundos para se conectar, você
deve redefinir o PIC e em seguida clique no Connect botão dentro de 4-5 segundos. 6. A última linha na janela de histórico, em seguida, deve agora ler "Connected". 7. Para iniciar o upload, basta clicar sobre o Iniciar Bootloader botão. 8. Seu programa será gravado no flash PIC. Bootloader irá reportar um erro que
pode ocorrer. 9. Redefinir o PIC e começar a executar.
Mikroelektronika - Software e Soluções de hardware para
www.mecatronicadegaragem.blogspot.com
Embedded World 63
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Características O código de inicialização do computador dá 5 segundos para ficar ligado a ele. Se não, ele começa a execução do existentes de código de usuário. Se houver um novo código para ser baixado, o código de inicialização recebe e grava os dados em memória do programa. As características mais comuns do gerenciador de inicialização pode ter estão listados abaixo:
Código no local Reset. Código em qualquer lugar em uma pequena área de memória. Verifica se o usuário quer novo código a ser carregado. Inicia a execução do código do usuário se nenhum novo código está a ser carregada. Recebe o código de novo usuário através de um canal de comunicação se o código está a ser carregado. Programas do novo código em memória.
Integrando Código de Utilizador e Código de inicialização O código de inicialização quase sempre usa o local Reset e alguns programas adicionais memória. É um simples pedaço de código que não precisa usar interrupções e, portanto, o código de utilizador pode usar o normal interrupção vetor em 0x0004. O código de inicialização deve evitar o uso do vetor de interrupção, por isso deve ter um ramo do programa no endereço intervalo 0x0000 a 0x0003. O código de inicialização deve ser programado na memória usando técnicas de programação convencionais, e os bits de configuração deve ser pro- programado no momento. O código de inicialização é possível acessar os bits de configuração, desde que não são mapeados no espaço de memória do programa.
64
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
OPÇÕES
menu Opções é composta por três guias: Code Editor, Ferramentas e as configurações de saída.
editor de código
O editor de código é um editor de texto avançado moda para satisfazer as necessidades dos profissionais.
Ferramentas
A mikroC PRO para PIC inclui a guia Ferramentas, que permite o uso de atalhos para programas externos, como a calculadora ou Bloco de Notas.
Você pode configurar até 10 atalhos diferentes, Tool0 edição - Tool9.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
65
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
As configurações de saída Ao modificar configurações de saída, o usuário pode configurar o conteúdo dos arquivos de saída. Você pode habilitar ou geração, por exemplo, desabilitar a ASM e arquivo da lista. Além disso, o usuário pode escolher o nível de otimização, e configurações específicas do compilador, que incluem a sensibilidade caso, vínculo dinâmico para literais de seqüência de configuração (descrita em mikroC PRO para PIC específicos). Construir todos os arquivos de biblioteca que permite ao utilizador usar a biblioteca compilado (*. mcl) em qualquer PIC MCU (quando esta opção estiver marcada), ou para um selecionado PIC MCU (quando esta opção for deixada desmarcado). Para obter mais informações sobre a criação de novas bibliotecas, consulte Criando Nova Biblioteca.
66
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Expressões Regulares
Introdução
As expressões regulares são um método amplamente utilizado de especificar padrões de texto para pesquisar. metacaracteres especiais permitem que você especificar, por exemplo, que a parti- string lar que você está procurando, ocorre no início ou final de uma linha, ou que contém n recorrência de um determinado personagem.
Simples partidas
Qualquer caractere único partidas em si, a menos que seja um metacaractere com uma especial significado descrito abaixo. Uma série de caracteres que corresponde uma série de caracteres na seqüência alvo, então o padrão "Curta" corresponderia "Curta" no alvo string. Você pode fazer personagens que normalmente funcionam como metacaracteres ou fuga seqüências devem ser interpretadas, precedendo-as com uma barra invertida "\". Por exemplo, metacaractere "^" início da seqüência de partidas, mas "\" ^ jogos caráter "^", e "\ \" jogos "\", etc
Exemplos:
não assinado seqüência de partidas 'unsigned' \ ^ Unsigned '^ Unsigned' string jogos
Seqüências de escape
Caracteres podem ser especificados usando uma seqüências de escape: "\ N" corresponde a uma nova linha, "\ T" uma guia, etc Em termos mais gerais, \ Xnn, onde nn é uma seqüência de dígitos hexadecimais, coincide com o caractere cujo valor ASCII é nn. Se você precisa de um código de caracteres de largura (Unicode), você pode usar '\ X {} nnnn', onde 'Nnnn' - Um ou mais dígitos hexadecimais.
\ Xnn - Char com o código hexadecimal nn \ X {nnnn) - char com o código hexadecimal nnnn (Um byte para texto simples e dois bytes para Unicode) \ T - Guia (HT / TAB), mesmo que \ X09 \ N - Nova linha (NL), mesmo que \ X0a \ R - Car.return (CR), mesmo que \ X0d \ F - Form feed (FF), mesmo que \ X0c \ A - Alarme (campainha) (BEL), mesmo que \ X07 \ E - Escape (ESC), mesmo que \ X1b
Mikroelekt
www.mecatronicadegaragem.blogspot.com
ronika - Soluções de software e hardware para o mundo embutido 67
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Exemplos:
unsigned \ x20int jogos 'Unsigned int' (Note o espaço no meio) \ Tunsigned jogos 'Unsigned' (Predecessed por guia)
Classes de caracteres Você pode especificar uma classe de caracteres, colocando uma lista de caracteres em [], Que será corresponde a nenhum dos personagens da lista. Se a primeira caractere após o "[" é "^", o classe corresponde a qualquer caractere que não está na lista. Exemplos:
Contagem [aeiou] r encontra strings "Countar ',' contador ', etc, mas não "Countbr ',' countcr, etc Contagem [^ aeiou] r encontra strings "Countbr ',' countcr, etc, mas não "Countar ',' contador ', etc
Dentro de uma lista, o "-" caractere é usado para especificar um intervalo, para que a-z representa todos os caracteres entre "A" e "Z", inclusive. Se você quiser "-" se a ser um membro de uma classe, colocá-lo no início ou no final da lista, ou precedem com uma barra invertida. Se você quiser ']', você pode colocá-lo no início da lista ou precedê-lo com uma barra invertida. Exemplos:
[Az] jogos 'A', 'z' e '-' [Az] jogos 'A', 'z' e '-' [A \-z] jogos 'A', 'z' e '-' [A-z] corresponde a todos os 26 pequenos caracteres 'A' para 'Z' [\ N \ x0d] corresponde a qualquer das # 10, # 11, # 12, # 13. [\ D-t] corresponde a qualquer dígito, '-' ou 'T'. []-A] corresponde a qualquer caractere de ']'..' Um '.
Metacaracteres Os metacaracteres são caracteres especiais que são a essência da expressão regular- sões. Existem diferentes tipos de metacaracteres, descrito abaixo.
68
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Metacaracteres - separadores Line
^ - Início da linha $ - Fim da linha \ A - Início do texto \ Z - Final do texto . - qualquer caractere na linha
Exemplos:
^ PORTA - seqüência de partidas » PORTA » só se for na início da linha PORTA $ - seqüência de partidas » PORTA » só se for no final de linha PORTA ^ $ - seqüência de partidas » PORTA » só se for a cadeia apenas em linha PORT.r - seqüências de jogos como 'Porta', 'PORTB', 'PORT1' e assim por diante
A "^" metacaractere por defeito só é garantido para coincidir com início da entrada string / texto, e os "$" metacaractere apenas no final. Embedded separadores de linha não vai ser acompanhado por ^ " ou "$". Você pode, entretanto, o desejo de tratar uma string como um buffer de multi-linha, de modo que a "^" vai jogo após qualquer separador de linha dentro da cadeia, e "$" corresponderá antes de qualquer linha separador. As expressões regulares trabalha com separadores de linha, tal como recomendado na http://www.uni- code.org/unicode/reports/tr18 /
Metacaracteres - classes pré-definidas
\ W - Uma caracteres alfanuméricos (incluindo "_") \ W - Um personagem nonalphanumeric \ D - Um personagem numéricos \ D - Um caráter não-numéricos \ S - Todo o espaço (o mesmo que [\ T \ n \ r \ f]) \ S - Um espaço não
Você pode usar \ W, \ D e \ S dentro de classes de personagens personalizadas.
Exemplo:
routi \ de - Seqüências de jogos como "Routi1e ',' routi6e ' e assim por diante, mas não "Routime ',' rotina ' e assim por diante.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
69
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Metacaracteres - Os limites de palavra Um limite de palavra ("B \") é um ponto entre dois personagens que tem um código alfanumérico caráter ("W \") de um lado, e um personagem nonalphanumeric ("W \") em os outros lateral (em qualquer ordem), contando os personagens imaginários fora o começo eo fim da cadeia como um correspondente "W \".
\ B - Corresponder a um limite de palavra) \ B - Correspondem a um não (limite de palavra)
Metacaracteres - Iterators Qualquer item de uma expressão regular pode ser seguido por um outro tipo de metacharac- tros - iteradores. Usando este metacaracteres, você pode especificar o número de ocorrências de personagem anterior, metacaractere ou subexpressão.
* - Zero ou mais ("gananciosos"), semelhante a {0,} + - Uma ou mais ("gananciosos"), semelhante a {1} ? - Zero ou um ("gananciosos"), semelhante a {0,1} {N} - Exatamente n vezes ("avarento") {N,} - Às vezes, pelo menos n ("avarento") {N, m} - Pelo menos n mas não mais do que m vezes ("avarento") *? - Zero ou mais ("non-greedy"), semelhante a {0,}? +? - Uma ou mais ("non-greedy"), semelhante a {1}? ? - Zero ou um ("non-greedy"), semelhante a {0,1}? {N}? - Exatamente n vezes ("non-greedy") {N,}? - Às vezes, pelo menos n ("non-greedy") {M, n}? - Pelo menos n mas não mais do que m vezes ("non-greedy")
Assim, os dígitos em chaves do forma, {M, n}, especificar o número mínimo de vezes para combinar com o item n eo máximo m. A forma {N} é equivalente a {N, n} e corresponde exatamente n tempos. A forma {N,} fósforos ou mais vezes. Não há limite ao tamanho da n ou m, mas grande número será mastigar mais memória e retardar execução. Assim, os dígitos em chaves do formulário, {N, m}, especificar o número mínimo de vezes para combinar com o item n eo máximo m. A forma {N} é equivalente a {N, n} e corresponde exatamente n tempos. A forma {N,} fósforos ou mais vezes. Não há limite ao tamanho da n ou m, mas um grande número vai mastigar mais memória e retardar execução. Se uma chaveta ocorre em qualquer outro contexto, ela é tratada como uma personagem regular.
70
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Exemplos:
r Contagem .* ß- seqüências de partidas como 'Contra' countelkjdflkj9r, e "Countr ' contagem. + r - seqüências de jogos como 'Contra' countelkjdflkj9r, mas não "Countr ' contagem.? r - seqüências de jogos como "Countar ',' contador ' e "Countr ' mas não "Countelkj9r ' r {2} counte - seqüência de partidas "Counteer ' counte {2} r - seqüências de jogos como "Counteer ',' counteeer ',' counteeer ' etc r {2,3} counte - seqüências de jogos como "Counteer, ou "Counteeer ' mas não "Counteeeer '
Uma pequena explanação sobre a "ganância". "Greedy" leva o maior número possível ", não gananciosos " toma o mínimo possível. Por exemplo, '+ B' e '* B' aplicada à corda "Abbbbc ' retorno "Bbbb", 'B +? retorna 'B', 'B *? retorna uma string vazia, 'B {2,3}? retorna 'BB', 'B {2,3}' retorna 'BBB'.
Metacaracteres - Alternativas
Você pode especificar uma série de alternativas para um padrão de uso "|" separá-los, de modo que bat | | pouco bot irá corresponder a qualquer dos "Bit", "Bat", ou "Bot" na seqüência alvo como seria "B (i | a | o) t)". A primeira alternativa inclui tudo, desde a última pat delimitador tern ("(", "[" Ou o início do padrão) até o primeiro "|", E a última alternativa contém tudo, desde a última "|" para o próximo padrão delim- iter. Por este motivo, é comum a prática de incluir alternativas entre parênteses, a minimizar a confusão sobre onde começam e terminam.
Alternativas são julgados a partir da esquerda para a direita, para a primeira alternativa encontrada para que o expressão inteira partidas, é aquele que é escolhido. Isto significa que as alternativas não são necessariamente gananciosos. Por exemplo: quando a correspondência rou | goleada contra "Rou- tine ", apenas o "Rou" parte irá corresponder, como é que a primeira alternativa julgado, e com sucesso corresponde a seqüência alvo (isto pode não parecer importante, mas é im- importante quando você está capturando texto correspondente usando parênteses). Também lembro que "|" é interpretado como um literal entre colchetes, por isso, se você escrever [Bit | morcego | bot] você é realmente apenas a correspondência [Biao |].
Exemplos:
rou (tine | te) cordas partidas - "Rotina" ou 'Route'.
Mikr
www.mecatronicadegaragem.blogspot.com
oelektronika - Soluções de software e hardware para o mundo embutido 71
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Metacaracteres - Subexpressões O bracketing construir ( ... ) também pode ser usado para definir regular subexpres- sões. Subexpressões estão contados com base na esquerda para a direita do seu open- ção entre parênteses. subexpressão Primeiro tem o número '1 '. Exemplos:
(Int) {8,10} seqüências de jogos que contenham 8, 9 ou 10 instâncias do 'int' routi ([0-9] | a +) e "Routi0e 'corresponde a' routi1e ',' rotina ',' routinne, "Routinnne 'etc
Metacaracteres - Referências Anteriores Metacaracteres \ 1 através \ 9 são interpretadas como referências anteriores. \ PREVI-partidas previamente combinados subexpressão #. Exemplos:
(.) \ 1 + 'Aaaa' partidas 'cc'. (. +) \ 'Abab "1 + jogos e '123123' (['"]?)( \ D +) \ 1 jogos "13" (Entre aspas), ou '4 ' (Entre aspas simples) ou 77 (Sem aspas) etc
72
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
mikroC PRO para PIC OPÇÕES DE LINHA DE COMANDO
Uso: mikroCPIC1618.exe [- <opts> [- <opts>]] [<ENTRADA> [- <opts>] [] - <opts>]] INFILE pode ser de *. C, *. mcl e *. Pld tipo.
Os seguintes parâmetros e pouco mais (ver manual) são válidos:
- P: MCU para que a compilação será feito. - PARA: Definir oscilador [em MHz]. - SP: Adicionar o diretório para a lista de caminho de pesquisa. - SE: Adicionar o diretório para o # include lista de pesquisa. - N: Os arquivos de saída gerados a caminho do arquivo especificado por filename. - B: Salvar arquivos binários compilados (*. mcl) para 'diretório'. - O: opções de saída diversas. - DBG: Gerar informações de depuração. - L: Verificar e reconstruir novas bibliotecas. - D: Criar todos os arquivos como bibliotecas. - Y: Dynamic link para strings literais. - C: Ligue maiúsculas e minúsculas. - UCD: CID tipo de compilação.
Exemplo:
mikroCPIC1618.exe-MSF-DBG-p16F887-ES-C-O11111114-fo8 - N "C: \ Lcd \ Lcd.mcppi" SP "C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ Defs \ "-SP" C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ usa \ P16 \ "SP" C: \ Lcd \ "Lcd.c" __Lib_Math.mcl " "__Lib_MathDouble.mcl" __Lib_System.mcl "__Lib_Delays.mcl" "__Lib_LcdConsts.mcl" __Lib_Lcd.mcl "
Parâmetros utilizados no exemplo:
- MSF: Short Message Format, usado para fins internos de IDE. - DBG: Gerar informações de depuração. - p16F887: MCU 16F887 selecionado. - C: Ligue maiúsculas e minúsculas. - O11111114: Várias opções de saída. - fo10: Defina a frequência do oscilador [em MHz]. - N "C: \ Lcd \ Lcd.mcppi" SP "C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ defs \ ": os arquivos de saída gerados a caminho do arquivo especificado por filename.
- -SP "C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ defs \ "adicionar o diretório para a lista de caminho de pesquisa.
- SP "C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ usa \": Adicione o diretório para a lista de caminho de pesquisa.
- -SP "C: \ Lcd \" adicionar o diretório para a lista de caminho de pesquisa. - "Lcd.c" __Lib_Math.mcl "__Lib_MathDouble.mcl" "__Lib_System.mcl" __Lib_Delays.mcl "__Lib_LcdConsts.mcl" "__Lib_Lcd.mcl": Especifique arquivos de entrada.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
73
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
PROJETOS A mikroC PRO para PIC organiza as aplicações em projetos, que consiste de um único arquivo de projeto (extensão . Mcppi) e um ou mais arquivos fonte (extensão). mikroC PRO para PIC IDE permite gerenciar múltiplos projetos (consulte Project Manager). Os arquivos de origem podem ser compilados somente se forem parte de um projeto. O arquivo de projeto contém as seguintes informações:
- - - - - - - - -
nome do projeto e uma descrição opcional, dispositivo de destino, bandeiras dispositivo (config palavra), relógio do dispositivo, lista dos arquivos do projeto de origem com os caminhos, arquivos de cabeçalho (*. h), arquivos binários (*. mcl) arquivos de imagem, outros arquivos.
Note-se que o projeto não incluir arquivos da mesma forma como pré-processamento que, consulte Adicionar / Remover arquivos do projeto.
Novo projeto
A maneira mais fácil de criar um projeto é por meio do assistente para Novo projeto, gota- menu para baixo Projeto > Novo projeto ou clicando no ícone Novo projeto a partir de Projeto barra de ferramentas.
74
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Assistente de Novas Etapas do Projeto
Comece a criar seu novo projeto, clicando no botão Next:
Primeiro Passo - Selecione o dispositivo da lista de dispositivos de drop-down.
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
75
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Passo dois - Digite o valor da freqüência do oscilador. Passo três - Especifique o local onde o projeto será salvo.
76
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Passo Quatro - Acrescentar ao arquivo de projeto projeto se eles estão disponíveis neste momento. Você pode sempre adicionar arquivos de projeto mais tarde o uso do Project Manager.
Passo Cinco - Clique no botão Concluir para criar seu novo projeto.
Tópicos relacionados: Gerente de Projetos, Project Configurações
Mikroelektronika - Soluções de software e hardware para o mundo embutido
77
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
PROJETOS A mikroC PRO para PIC organiza as aplicações em projetos, consistindo de um único arquivo de projeto (extensão . Mcppi) e um ou mais arquivos fonte (extensão). mikroC PRO para PIC IDE permite gerenciar múltiplos projetos (consulte Project Manager). Os arquivos de origem podem ser compilados somente se forem parte de um projeto. O arquivo de projeto contém as seguintes informações:
- - - - - - - - -
nome do projeto e uma descrição opcional, dispositivo de destino, bandeiras dispositivo (config palavra), relógio do dispositivo, lista dos arquivos do projeto de origem com os caminhos, arquivos de cabeçalho (*. h), arquivos binários (*. mcl) arquivos de imagem, outros arquivos.
Note que o projeto não inclui arquivos da mesma forma como pré-processamento faz, consulte Adicionar / Remover arquivos do projeto.
Novo projeto
A maneira mais fácil para criar um projeto é por meio do assistente para Novo projeto, gota- menu para baixo Projeto > Novo projeto ou clicando no ícone de New Project Projeto barra de ferramentas.
78
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Assistente de Novas Etapas do Projeto
Comece a criar seu novo projeto, clicando no botão Next:
Primeiro Passo - Selecione o dispositivo da lista de dispositivos drop-down.
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
79
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Passo dois - Digite o valor da freqüência do oscilador. Passo três - Especifique o local onde o projeto será salvo.
80
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Passo Quatro - Acrescentar ao arquivo de projeto projeto se eles estão disponíveis neste momento. Você pode sempre adicionar arquivos de projeto mais tarde o uso do Project Manager.
Passo Cinco - Clique no botão Concluir para criar seu novo projeto:
Mikroelektronika - Soluções de software e hardware para o mundo embutido
81
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
PERSONALIZAÇÃO PROJETOS Edit Project Você pode alterar as configurações básicas do projeto na janela de configurações do projeto. Você pode chip de mudar, e freqüência de oscilação. Qualquer mudança na configuração do projeto Janela afeta atualmente projeto ativo, então no caso de mais de um projeto estiver aberto, você têm de assegurar que exatamente o projeto desejado é definido como um activo no projecto Manager. Além disso, você pode alterar os bits de configuração do chip selecionado no Edit Projeto janela. Gerenciando Grupo de Projecto mikroC PRO para PIC IDE covenient fornece a opção que permite vários projetos ser abertas simultaneamente. Se você tem vários projetos sendo conectado em alguns Assim, você pode criar um grupo de projetos. O grupo do projecto pode ser salva, clicando no ícone Save Project Group da a janela do Project Manager. O grupo do projecto pode ser reabriu clicando no Open Project Icon Group. Todos os dados relevantes sobre o grupo do projeto são armazenadas em o arquivo de grupo de projeto (extensão . Mpgroup) Adicionar / Remover arquivos do Project O projeto pode conter os seguintes tipos de arquivo:
- - - - - -
arquivos de origem . H arquivos de cabeçalho . Mcl binária arquivos PLD nível de projeto define os arquivos arquivos de imagem . Hexadecimal, . Asm e . Lst arquivos, consulte os arquivos de saída. Esses arquivos não podem ser adicionados ou retirados do projeto.
- Outros arquivos
82
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
A lista de arquivos fonte relevante é armazenado no arquivo de projeto (extensão . Mcppi).
Para adicionar o arquivo de origem para o projeto, clique em Adicionar Arquivo à Project Icon. Cada adicionou arquivo de origem deve ser independente, isto é, deve ter todas as definições necessárias após pré-processamento. Para remover o arquivo (s) do projeto, clique no botão Remover Arquivo do Project Icon.
Nível do projeto define:
Projeto Nível Define (. PLD) arquivos também podem ser adicionados ao projeto. Projeto define nível arquivos permitem que você tenha define que são visíveis em todos os arquivos de origem no projeto. Um arquivo deve conter uma definição de cada linha da seguinte forma:
<symbol> [= [<value>]] <symbol (a,b)> [= [<value>]]
Define um símbolo macro nomeada. Para especificar um valor, use = Valor. Se = Valor é omitido, 1 será adotado. Não digitar caracteres espaço em branco imediatamente antes da "=". Se um caractere de espaço em branco é inserido imediatamente após a "=", A macro é definido como zero token. Esta opção pode ser especificada repetidamente. Cada aparecimento de símbolo será substituído pelo valor antes da compilação. Existem dois níveis de projeto pré-define. Veja em nível de projeto predefinido define
Nota: Para inclusão dos arquivos de cabeçalho (extensão . H), use o direção pré-processador tiva # Include. Veja arquivo de inclusão para mais informações.
Tópicos relacionados: Gerente de Projetos, Project Settings, Edit Project
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido 83www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Arquivos de origem Arquivos de origem contendo o código C deve ter a extensão. A lista de arquivos de origem relevantes para a aplicação é armazenado no arquivo de projeto com extensão mcppi., juntamente com outras informações de projeto. Você pode compilar arquivos de origem somente se eles são parte do projeto. Use a diretiva de pré-processamento # Include para incluir arquivos de cabeçalho com a extensão . H. Não confie na pré-processador para incluir outros arquivos de origem de cabeçalhos- consulte Adicionar / Remover arquivos do projeto para obter mais informações. Gerenciando arquivos de origem Criar novo arquivo de origem Para criar um novo arquivo de origem, faça o seguinte: 1. Selecione Arquivo > Nova Unidade a partir do menu drop-down, ou pressione Ctrl + N, ou clique no
Novo Ícone do arquivo
Arquivo da Barra de Ferramentas.
2. Uma nova guia será aberta. Este é um arquivo de origem novo. Selecione Arquivo > Guardar da
drop-down menu, ou pressione Ctrl + S, ou clique no botão Save File Icon
a partir do arquivo
Barra de ferramentas e nomeá-lo como quiser.
Se você usar o novo assistente de projeto, um arquivo de origem vazio, o nome do projeto com extensão, será criado automaticamente. A mikroC PRO para PIC não requer que você ter um arquivo de origem o mesmo nome que o projeto, é só uma questão de conveniência.
Abrindo um arquivo existente
1. Selecione Arquivo > Abrir a partir do menu drop-down, ou imprensa Ctrl + S, ou clique no botão Abrir
File Icon Arquivo da Barra de Ferramentas. Em Abrir caixa de diálogo Procurar para o local do
arquivo que deseja abrir, selecione-o e clique no botão Abrir. 2. Os selecionados arquivo é exibido em sua própria guia. Se o arquivo selecionado já está aberto, a sua
guia Editor atual ficará ativo.
www.mecatronicadegaragem.blogspot.com
Imprimindo um arquivo aberto
1. Certifique-se que a janela que contém o arquivo que você deseja imprimir está ativo. 2. Selecione Arquivo > Imprimir da drop-down menu, ou pressione Ctrl + P. 3. Na janela de visualização de impressão, definir um layout desejado no documento e clique no
botão OK. O arquivo será impresso na impressora selecionada.
84
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Salvando arquivo
1. Certifique-se que a janela que contém o arquivo que você deseja salvar está ativo. 2. Selecione Arquivo > Guardar a partir do menu drop-down, ou pressione Ctrl + S, ou clique no botão Salvar
File Icon Arquivo da Barra de Ferramentas.
Salvando arquivo com um nome diferente
1. Certifique-se que o janela contendo o arquivo que você deseja salvar está ativo. 2. Selecione Arquivo > Salvar como a partir do menu drop-down. O diálogo Novo nome do arquivo
ser exibido. 3. Na caixa de diálogo, navegue até a pasta onde você deseja salvar o arquivo. 4. No campo Nome do arquivo, modificar o nome do arquivo que você deseja salvar. 5. Clique no botão Salvar.
A fechar o ficheiro
1. Certifique-se que a guia que contém o arquivo que você deseja fechar é a aba ativa. 2. Selecione Arquivo > Fechar a partir do menu drop-down, ou para a direita, clique na guia do arquivo que
que deseja fechar e selecione Fechar opção no menu de contexto. 3. Se o arquivo foi alterado desde que foi salvo pela última vez, você será solicitado a salvar
suas alterações.
Tópicos Relacionados: Menu Arquivo, Arquivo Barra, Gerente de Projetos, Project Settings,
Mikroelektronika - Soluções de software e hardware para o mundo embutido
85
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
CLEAN Pasta do projeto Este menu dá-lhe a opção de escolher quais arquivos do seu projeto atual que você quer para excluir. Os arquivos marcados em negrito podem ser facilmente recriadas através da construção de um projeto. Outros arquivos devem ser marcada para exclusão apenas com um grande cuidado, porque IDE não pode recuperá-los. Temas relacionados: Personalizando Projetos
86
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
COMPILAÇÃO
Quando você criou o projeto e escrito o código fonte, é tempo para compilar ele. Selecione Projeto > Construir a partir do menu drop-down, ou clique no ícone Build
a partir de
Barra de ferramentas de projeto. Se mais mais do que um projeto está aberto, você pode compilar todos abertos projetos selecionando Projeto > Build All a partir do menu drop-down, ou clique no botão Construir Todos Icon do Projeto Toolbar.
barra de progresso será exibida para informá-lo sobre o status de compilação. Se não houver alguns erros, você será notificado na janela de erro. Se não forem encontrados erros, o mikroC PRO para PIC irá gerar arquivos de saída.
Arquivos de saída
Após a compilação bem-sucedida, o mikroC PRO para PIC irá gerar arquivos de saída em o projeto pasta (pasta que contém o arquivo de projeto . Mcppi). Arquivos de saída são resumidos na tabela abaixo:
Assembléia Ver
Depois de compilar o programa no mikroC PRO para PIC, você pode clicar no botão Exibir Assembléia ícone ou selecione Projeto > Exibir Assembléia a partir do menu drop-down para analisar o código assembly gerado (. asm arquivo) em uma janela nova aba. Assembléia é legível com nomes simbólicos.
Tópicos relacionados: Menu Project, Project Barra de ferramentas, janela de erro, Gerente de Projeto, Pro- Configurações ject
Mi
www.mecatronicadegaragem.blogspot.com
Formato Descrição Tipo de A i
Intel HEX hex Intel registros estilo. Use esse arquivo para o programa PIC MCU
. Hexa
Binária mikro Compilado Biblioteca. distribuição binária do aplicativo que pode ser incluída em outros projetos.
. Mcl
Lista de Arquivos Resumo dos PIC colocação de memória: a instrução
d i d i ó l
. Lst
Montador de
i
Homem montagem legíveis com nomes simbólicos, extraídos a partir da lista de arquivos.
. Asm
kroelektronika - Soluções de software e hardware para o mundo embutido 87
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
MENSAGENS DE ERRO Mensagens de erro do compilador: - Erro de sintaxe: Esperado [% S] mas [% S] encontrados - Elemento de matriz não pode ser função - A função não pode matriz de retorno - Classe de armazenamento inconsistentes - Tipo inconsistentes - [% S] tag redefiniu [% S] - Ilegal typecast [% S] [% s] - "% S" identificador não é válido - Declaração inválido - A expressão constante necessária - Erro interno [% S] - Há muitos parâmetros reais - Não parâmetros suficientes. - Expressão inválida - Identificador esperado, mas [% S] encontrados - Operador [% S] não é aplicável a estes operandos [% S] - Atribuir a não lvalue [% S] - Não é possível lançar [% S] para [% S] - Não é possível atribuir [% S] para [% S] - Lvalue necessária - Ponteiro necessária - O argumento é fora do alcance - Identificador não declarado [% S] na expressão - Too inicializadores muitos - Não é possível estabelecer essa taxa de transmissão no [% S] MHz de clock - Estouro de pilha - Operador inválido [% S] - Esperado variável, mas constante [% S] encontrados - Possibilidade constante, mas [% S] encontrados - [% S] não pode ser usado fora de um loop - Tipo desconhecido [% S] - Variável [% S] é redeclarado - Identificador não declarado [% S] - Limite a produção aumentou 2K palavras - [% S] já foi declarado [% S] - Tipo incompatível: esperado [% S], mas [% S] encontrados - Arquivo [% S] não encontrado [% S] - Não há espaço em memória RAM suficiente para todas as variáveis - Não há espaço suficiente ROM - Tipo inválido em Array - Divisão por zero - Tipos incompatíveis: [% S] [% s] - Excesso de caracteres
mikroC PRO para PIC
88
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
- Montador de instruções [% S] não foi encontrado - Nome do projeto deve ser especificado - Opção de linha de comando desconhecido: [% S] - Extensão de ficheiro em falta: [% S] - Ruim para o argumento: [% S] - Preprocessor encerrado com código de erro [% S] - Endereço Bad absoluta [% S] - Recursão ou cross-convocação de [% S] - Reentrância não é permitido: função [% s] chamado a partir de dois segmentos - Nenhum arquivo especificado Parâmetro - dispositivo ausente (por exemplo, P16F ...) - Seqüência de parâmetro inválido - Nome do projeto deve ser definido - Especificador necessário - [% S] não encontrado [% S] - Índice fora dos limites - Dimensão da matriz deve ser maior que 0 - Expressão Const esperado - Const inteiro esperado - Recursão em definição - Array corrompido - Argumentos não pode ser do tipo void - Argumentos não pode ter specificator memória explícita - Classe de armazenamento Bad - Ponteiro para a função exigida - Função necessária - Conversão ilegal ponteiro para casal - Tipo Integer necessário - Os membros não podem ter especificador de memória - Os membros não pode ser do tipo bit ou sbit - Too inicializadores muitos - Too inicializadores muitos subaggregate - Já usado [% S] - Ilegal expressão com o vazio - O endereço deve ser maior que 0 - [% S] Identificador redefiniu - Anulação do usuário - Expressão deve ser maior que 0 - Declarator inválido esperado "(" ou identificador - Nome typdef redefinidos: [% S] - Declarator erro - Lista qualificador Specifer / esperado - [% S] já utilizado - ILevel só pode ser utilizada com as rotinas de interrupção de serviço -; Esperado, mas [% S] encontrados
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido 89
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
- Expectativa "{" - [% S] Identificador redefiniu - "(" esperado, mas [% S] encontrados - ")" esperado, mas [% S] encontrados - "Case" fora do switch - "" esperado, mas [% S] encontrados - "Default" rótulo de alternar - Expressão do switch deve avaliar o tipo integral - Enquanto esperava, mas [% S] encontrados - Funções void não pode retornar valores - "Continue" fora do circuito - Código Inacessível - Etiqueta redefiniu - Tipo de vazio na expressão - Too muitos chars - tipo não resolvida - Matrizes de objetos contendo matrizes de tamanho zero são ilegais - Invalid enumerador - ILevel só pode ser utilizada com as rotinas de interrupção de serviço - Valor iLevel deve ser integral constante - Fora da faixa iLevel "0 .. 4" - "}" esperado [% S] encontrados - ")" esperado, mas [% S] encontrados - "Quebrar" fora do laço ou switch - Esvazie char - A inexistência de campo [% S] - Ilegal representação char: [% S] - Inicializador de erro de sintaxe: array multidimensional faltando subscrito - Too inicializadores muitos subaggregate - Pelo menos um caminho de pesquisa deve ser especificado - Não existe memória RAM suficiente para a pilha de chamadas - Demo Limite - Parâmetro [% S] não deve ser do tipo bit ou sbit - A função não deve ter valor de retorno do tipo bit ou sbit
mikroC PRO para PIC
90
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Mensagens de advertência do compilador:
Meio Ambiente
- - - - - - - - - - - - - -
Ruim ou falta de parâmetro FOSC. 8MHz valor padrão usado caminho de pesquisa especificado não existe: [% S] Especificados inclua o caminho não existe: [% S] O resultado não é definido em função: [% S] Inicialização de objeto externo [% S] conversão ponteiro Suspicious A conversão implícita do ponteiro para int linha pragma Desconhecido ignorado: [% S] A conversão implícita de int para ptr Gerado taxa de transmissão é [% S] bps (= erro [% S] por cento) modelo de memória Desconhecido [% S], o modelo usado em vez de memória pequeno bit IRP deve ser definida manualmente para acesso indirecto a [% S] variável Variável [% S] tenha sido declarada, mas não utilizado " Ilegal tipo de arquivo: [% S]
Mensagens de erro vinculador:
- - - - - - -
Redefinição das [% S] já definido no [% S] principal função não é definida rotina do sistema não é encontrado para inicialização de: [% S] definição agregada Bad [% S] Não Resolvidos extern [% S] Bad função absoluta endereço [% S] RAM insuficiente [% S]
Mikroelektronika - Soluções de software e hardware para o mundo embutido
91
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Visão geral do software simulador A fonte de nível de software Simulator é um componente integrante do mikroC PRO para PIC ambiente. Ele é projetado para simular operações do PIC e MCUs auxiliar os usuários na depuração de código C escrito para esses dispositivos. Após a conclusão de escrever o seu programa, escolha Lançamento tipo de compilação no projeto janela de configurações: Depois de ter compilado com sucesso o seu projeto, você pode executar o Software Simu- lator selecionando Executar > Iniciar o depurador a partir do menu drop-down, ou clicando em o ícone Iniciar o depurador a partir da barra de ferramentas do depurador. Iniciando o Sim
Software ulador torna mais opções disponíveis: Step Into, Step Over, Step Out, Run to Cursor, etc linha que está a ser executada é a cor em destaque (azul por padrão).
Nota: O Simulador de Software simula o fluxo do programa e execução de instruções de linhas de produção, mas não pode inteiramente PIC emular o comportamento do dispositivo, ou seja, não atualização temporizadores, sinalizadores de interrupção, etc
92
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
Breakpoints Janela
A janela de Breakpoints gerencia a lista de atualmente definido pontos de interrupção no projeto. Doubleclicking o ponto de interrupção pretendido causará cursor para navegar para o correspon- ding local no código-fonte.
Janela de Inspeção
O Software Simulador de ver da janela é o principal software janela Simulator que lhe permite monitorar itens de programa ao simular o seu programa. Para mostrar a Janela de Inspeção, selecione Ver > Debug Windows > Assista no menu drop-down menu.
O relógio apresenta janela de variáveis e registradores do MCU, juntamente com seus endereços e valores.
Há duas maneiras de adicionar variáveis / registar-se para a lista de observação:
pelo seu verdadeiro nome (nome da variável no código "C"). Basta selecionar desejado variable/reg- Ister de Selecione variável da lista menu drop-down e clique no botão Adicionar
. pelo seu nome de identificação (Nome da variável de montagem). Simplesmente digite o nome do ID que variável / registo que pretende exibir em Pesquisar na variável assemby nome caixa e clique no botão Adicionar .
Mikroelektronika - Soluções de software e hardware para o mundo embutido
93
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
As variáveis também podem ser retirados a janela Watch, basta selecionar a variável que você deseja remover e clique no botão Remover.
Adicionar Tudo Button
Botão Remover tudo
agrega todas as variáveis.
remove todas as variáveis.
Você também pode expandir / recolher variáveis complexas, ou seja, variáveis de tipo struct, cordas ... Os valores são atualizados à medida que avançar a simulação. itens alterados recentemente são de cor vermelha.
Duplo clicando em uma variável ou clicando no botão Propriedades abre Edit Value janela na qual você pode atribuir um novo valor para o selecionado variável / register. Além disso, você pode escolher o formato da variável / register representação entre decimal, hexadecimal, float, binária ou de caracteres. Todas as representações, exceto float são assinados por padrão. Para a representação assinada clique na caixa de seleção ao lado o Assinado etiqueta.
94
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
O valor de um item também pode ser alterada pelo campo item clicando duas vezes o valor e digitar o novo valor diretamente.
.
Exibir janela RAM
Depurador Ver RAM janela está disponível a partir do menu drop-down, Ver > Depurar Windows > Ver RAM.
A Janela de RAM Vista exibe o mapa de memória RAM PIC, com mudou recentemente itens de cor vermelha.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
95
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
Cronômetro Janela O Software Simulador de Cronômetro janela está disponível a partir do menu drop-down, Ver > Debug Windows > Cronômetro. A janela exibe um cronômetro contagem atual de ciclos de tempo desde a última Soft ação Simulator ware. Cronômetro mede o tempo de execução (número de ciclos) partir do momento em Software Simulator já começou e pode ser redefinido a qualquer momento. Delta representa o número de ciclos entre as linhas de ação onde o Software Simulador começou e terminou. Nota: O usuário pode alterar o relógio na janela cronômetro, que será recalculado- Os valores finais para a última frequência especificada. Mudando o relógio no cronômetro Janela não afeta as configurações de projeto real - apenas fornece uma simulação.
96
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Nome Descrição Função Key
Barra de
Início Depurador Simulador de Software Iniciar. [F9]
Executar / Pausar
d
Executar ou pausar Software Simulator. [F6]
Parar Depurador
Stop Simulador de Software. [Ctrl + F2]
Toggle
Breakpoints
Alternar ponto de interrupção na posição do cursor atual posição. Para visualizar todos os pontos de interrupção, selecione Executar > Veja os pontos de interrupção no menu d d
[F5]
Corra para cur- sor
Executar todas as instruções entre os actuais instrução e posição do cursor.
[F4]
Step Into
Execute o atual C (simples ou multi-ciclo) instrução, e então pare. Se a instrução é um rou- chamada nicotina, entra na rotina e parar na primeira i t ã i t à h d
[F7]
Step Over Execute o atual C (simples ou multi-ciclo) instrução, e então pare.
[F8]
Step Out Executar todas as demais instruções do rotina atual, o retorno e depois parar.
[Ctrl + F8]
CAPÍTULO 2
mikroC PRO para PIC
SIMULADOR DE OPÇÕES DE SOFTWARE
Tópicos Relacionados: Executar Menu Debug Barra
Meio Ambiente
Mikroelektronika - Soluções de software e hardware para o mundo embutido
97
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente
mikroC PRO para PIC
CRIANDO NOVOS BIBLIOTECA mikroC PRO para PIC permite que você crie suas próprias bibliotecas. A fim de criar um biblioteca em mikroC PRO para PIC siga os passos abaixo: 1. Criar um novo arquivo de origem C, consulte Gerenciando arquivos de origem 2. Salve o arquivo em uma das subpastas da pasta do compilador Usos:
Letra_da_unidade: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ usa \ P16 \ Letra_da_unidade: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ usa \ P18 \ Se você estiver criando biblioteca para família de microcontroladores PIC16 o arquivo deve ser salvo na pasta P16. Se você está criando biblioteca para a família PIC18 MCUs o arquivo deve ser salvo em fodler P18. Se você estiver criando biblioteca para famílias PIC16 e PIC18 MCUs o arquivo deve ser salvo em ambas as pastas.
3. Escreva um código para a sua biblioteca e salvá-lo. 4. Adicionar __Lib_Example arquivo em algum projeto, consulte Project Manager. Recompile o
projeto. Se você quiser usar esta biblioteca para todos os MCUs, então você deve ir para Ferramentas > Opções > Saída configurações e verificar Construir todos os arquivos como a biblioteca caixa. Isto irá construir bibliotecas em uma forma comum que irá funcionar com todos os MCUs. Se isso caixa não estiver marcada, então biblioteca será construída para MCU selecionado. Tenha em mente que o compilador apresentará um erro se uma biblioteca construída de MCU específico é utilizadas para outra.
5. Compilado arquivo __Lib_Example.mcl deve aparecem em ... \ mikroC PRO para
PIC \ usa \ pasta. 6. Abra o arquivo de definição para o MCU que você deseja usar. Este arquivo é colocado na
pasta compilador Defs:
Letra_da_unidade: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ Defs \
e é chamado MCU_NAME.mlk, por exemplo 16F887.mlk
7. Adicione o segmento de código a seguir <LIBRARIES> nó da definição
arquivo (arquivo de definição está no formato XML): <LIB> <alias> Example_Library </ Alias> <FILE> __Lib_Example </ File> <Type> REGULAR </ Tipo>
www.mecatronicadegaragem.blogspot.com
98
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
</ LIB>
8. Adicionar Biblioteca para mlk arquivo para cada MCU que você deseja usar com sua biblioteca.
9. Clique no botão Atualizar no Gerenciador de bibliotecas
10. Example_Library deve aparecer na janela do gerenciador de biblioteca.
Biblioteca de várias versões
Biblioteca Alias representa o nome original que está vinculada a Biblioteca correspondente . Mcl arquivo. Por exemplo biblioteca UART para 16F887 é diferente da UART biblioteca para 18F4520 MCU. Assim, duas diferentes versões UART Biblioteca foram feitas, consulte mlk arquivos para estes dois MCUs. Note-se que estas duas bibliotecas têm a mesma Biblioteca Alias (UART) em ambos os mlk arquivos. Esta abordagem permite que você tenha uma representação idêntica de UART biblioteca para os MCUs em Library Manager.
Tópicos relacionados: Library Manager, Gerente de Projetos, Gerenciamento de arquivos de origem
Mikroelektronika - Soluções de software e hardware para o mundo embutido
99
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2 Meio Ambiente mikroC PRO para PIC
100
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
3
MIKROICD (IN-CIRCUIT Depurador)
mikroICD é um instrumento extremamente eficaz para depuração em Tempo-Real em nível de hardware. CID depurador permite que você execute um mikroC PRO para PIC programa em um host PIC valores das variáveis do microcontrolador e ver, Registros de Função Especial (SFR), nota- ry e EEPROM conforme o programa está sendo executado.
101
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3 mikroICD mikroC PRO para PIC
Passo n º 1 Se você tiver de hardware e software adequados para o uso mikroICD, então, a com- clusão de escrever seu programa, você terá que escolher CID Debug tipo de compilação. Passo n º 2 Você pode executar o mikroICD selecionando Executar > Depurar a partir do menu drop-down, ou clicando em Debug Icon . Iniciando o depurador faz mais opções disponíveis: Step Into, Step Over, Run to Cursor, etc linha que está a ser executada é a cores de alta iluminados (azul por padrão). Há também a notificação sobre a execução do programa e pode ser encontrada em Janela de Inspeção (barra de status amarela). Note que algumas funções recebem tempo para executar, de modo execução do programa é indicado no Janela de Inspeção.
102
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC mikroICD
Mikroelektronika - Soluções de software e hardware para o mundo embutido
103
www.mecatronicadegaragem.blogspot.com
Nome Descrição Função chave
Depurar Depurador Iniciar. [F9]
Executar / Pausar
d
Executar ou pausar Debugger. [F6]
Toggle
Breakpoints
Alternar ponto de interrupção na posição atual do cursor- ção. Para visualizar todos os pontos de interrupção, selecione Executar> Ver os pontos de interrupção no menu d d
[F5]
Executar até o
cursor
Executar todas as instruções entre a corrente instrução e posição do cursor.
[F4]
Step Into
Execute o atual C (simples ou multi-ciclo) instrução, e então pare. Se a instrução é uma rotina chamada, introduza a rotina e parar na primeira ins- ção seguinte a chamada.
[F7]
Step Over
Execute o atual C (simples ou multi-ciclo) instrução, e então pare. Se a instrução é um rou- chamada tine, ignorá-lo e parar na primeira instrução
ó h d
[F8]
RAM Flush RAM PIC Flush atual. Todas as variáveis valores será alterado de acordo com os valores de
N / A
Desmontagem Ver
Alternar entre a desmontagem ea fonte de C vista.
[Alt + D]
CAPÍTULO 3 mikroICD
mikroICD Debugger Options
mikroC PRO para PIC
104
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC mikroICD
Exemplos mikroICD Debugger
Aqui está um passo a passo Exemplo Debugger mikroICD.
Passo n º 1
Primeiro você tem que escrever um programa. Nós iremos mostrar como funciona mikroICD usando este exemplo:
/ / Conexões do módulo do LCD LCD_RS sbit na RB4_bit; LCD_EN sbit na RB5_bit; LCD_D4 sbit na RB0_bit; LCD_D5 sbit na RB1_bit; LCD_D6 sbit na RB2_bit; sbit LCD_D7 na RB3_bit;
LCD_RS_Direction sbit na TRISB4_bit; LCD_EN_Direction sbit na TRISB5_bit; LCD_D4_Direction sbit na TRISB0_bit; sbit LCD_D5_Direction na TRISB1_bit; LCD_D6_Direction sbit na TRISB2_bit; LCD_D7_Direction sbit na TRISB3_bit; / / Fim conexões do módulo do LCD
char texto [17] = "mikroElektronika"; i char;
void main () {
PORTB = 0; TRISB = 0; ANSEL = 0; ANSELH = 0;
Lcd_Init (); Lcd_Cmd (_LCD_CLEAR); Lcd_Cmd (_LCD_CURSOR_OFF);
for (i = 1; i <17; i + +) {
Lcd_Chr (1, i, o texto [i-1]); }
}
Mikroelektronika - Soluções de software e hardware para o mundo embutido
105
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3 mikroICD mikroC PRO para PIC
Passo n º 2 Após a compilação bem-sucedida e pressione programação PIC F9 para iniciar mikroICD. Após mikroICD inicialização linha ativa azul deve aparecer: Passo n º 3 Vamos depurar linha por linha do programa. Pressionando F8 estamos executando código linha por linha. É recomendável que o usuário não usa Step Into [F7] e Step Over [F8] mais Atrasos rotinas e rotinas contendo os atrasos. Ao invés disso use Run para o cursor [F4] e funções Breakpoints. Todas as alterações são lidos a partir PIC e carregado na Janela de Inspeção. Note-se que PORTB, TRISB, Ansel e ANSELH mudou seus valores. 255-0.
106
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC mikroICD
Passo n º 4
Step Into [F7] e Step Over [F8] são mikroICD funções depurador são usados no modo de pisar. Há também em Tempo Real modo suportado pelo mikroICD. Funções que são usados em Tempo-Real modo são Run / Pause Debugger [F6] e correr para o cursor [F4]. Pressionando F4 vai para a linha selecionada pelo usuário. Utilizador apenas tem que seleccionar a linha com cursor e pressione F4, eo código será executado até que a linha selecionada é atingida.
Passo n º 5
Run (Pausa) Debugger [F6] e Breakpoints Toggle [F5] são mikroICD funções depurador que são usados no modo em Tempo Real. Pressionando F5 marcas da linha selecionada pelo usuário para a interrupção. F6 executa o código até o ponto de interrupção é atingido. Depois de alcançar ponto de interrupção depurador pára. Aqui no nosso exemplo, vamos usar pontos de interrupção para a escrita "mikroElektronika" no LCD char char. Ponto de interrupção é definido no Lcd_Chr eo programa irá parar cada vez que essa função seja alcançado. Depois de alcançar ponto de interrupção que deve pressionar F6 novamente para continuar a execução do programa.
Mikroelektronika - Soluções de software e hardware para o mundo
www.mecatronicadegaragem.blogspot.com
embutido 107
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3 mikroICD mikroC PRO para PIC
Breakpoints foi separada em dois grupos. Há hardware e software pontos de quebra. rápida interrupção de hardware são colocados em PIC e eles fornecem depuração. Número de pontos de interrupção de hardware é limitado (1 para P16 e 1 ou 3 para o P18). Se todos brekpoints hardware são usados, os pontos de interrupção em seguida, que serão utilizados são softwares ponto de interrupção. Os pontos de interrupção são colocados dentro mikroICD, e eles simulam hard- breakpoints ware. interrupção de software é muito mais lento do que hardware break- pontos. Esta diferença entre as diferenças de hardware e software não são visíveis mikroICD em software, mas os seus horários diferentes são bastante notável, por isso é importante saber que há dois tipos de pontos de interrupção.
108
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC mikroICD
mikroICD (In-Circuit Debugger) Visão
Breakpoints Janela
A janela de Breakpoints gerencia a lista de pontos de interrupção definidos atualmente no projeto. Doubleclicking o ponto de interrupção pretendido causará cursor para navegar para o correspon- ding local no código-fonte.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
109
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3 mikroICD mikroC PRO para PIC
Janela de Inspeção Depurador de ver da janela é a janela principal do depurador que permite moni- tor itens do programa, enquanto executar o programa. Para mostrar a janela de inspeção, selecione Ver > Debug Windows > Janela de Inspeção a partir do menu drop-down. O relógio apresenta janela de variáveis e registradores do PIC, com os respectivos endereços e valores. Os valores são atualizados à medida que avançar a simulação. Use o drop-down menu para adicionar e remover os itens que você deseja monitorar. Recentemente mudou itens são de cor vermelha.
110
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC mikroICD
Duplo clicar em um item abre a Edit Value janela na qual você pode atribuir um novo valor para a variável selecionada / register. Além disso, você pode mudar a visão em hexadecimal, binário, char, ou decimal para o item selecionado.
EEPROM Janela de Inspeção
mikroICD EEPROM Watch Janela está disponível a partir do menu drop-down, Ver > Debug Windows > Ver EEPROM. O EEPROM janela Watch mostra os valores atuais inscritos na PIC interna Memória EEPROM. Existem dois botões de ação relativa EEPROM Watch ganha- Dow - Escreve EEPROM e Leia EEPROM. Escreve EEPROM grava dados de EEPROM janela Watch em memória EEPROM interna do PIC. Leia EEPROM lê dados de PIC de memória EEPROM interna e carrega-lo na janela de EEPROM.
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
111
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3 mikroICD mikroC PRO para PIC
Código Janela de Inspeção mikroICD Código Janela de Inspeção está disponível no menu drop-down menu, Ver > Debug Windows > Exibir Código. O Código de janela de inspeção de código mostra (código hexadecimal) escrito em PIC. Não há ação botão sobre Código janela Watch - Código de leitura. Código de leitura lê o código de PIC e carrega-lo em View Code Window. Além disso, você pode definir um escopo de endereço no qual o código hexadecimal será lido.
112
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC mikroICD
Ver Memória RAM
Depurador Ver RAM janela está disponível a partir do menu drop-down, Ver > Depurar Windows > Ver RAM.
A RAM Windows Vista exibe o mapa de memória RAM PIC, com mudou recentemente itens de cor vermelha.
Erros comuns
Tentando PIC mikroICD programa enquanto estiver ativa. Tentando depurar Lançamento construir versão Type do programa. Tentando depurar o código do programa que mudou não foi compilado e pro gramada em PIC. Tentando selecionar linha que é vazia de Run para o cursor [F4] e Breakpoints Toggle [F5] funções. Tentando depurar PIC com mikroICD enquanto Watch Dog Timer está habilitado. Tentando depurar PIC com mikroICD enquanto Power Up Timer é habilitado.
Não é possível forçar o Código de Proteção ao tentar depurar PIC com mikroICD. Tentando depurar PIC com mikroICD com resistores pull-up definido como ON RB6 e RB7. Para corrigir mikroICD depuração não usa pull-ups.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
113
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3 mikroICD mikroC PRO para PIC
MIKROICD ADVANCED BREAKPOINTS mikroICD prevê a possibilidade de utilizar os pontos de interrupção avançada. Avançado Breakpoints podem ser usados com PIC18 MCUs e PIC18FJ. Para habilitar avançada Breakpoints definir a opção Advanced Breakpoints dentro da janela Watch: Para configurar o Advanced Breakpoints, iniciar mikroICD [F9] e selecione Ver > Depurar Windows > Advanced Breakpoints opção no menu drop-down ou utilize [Ctrl + Shift + A] atalho. Nota: Quando Advanced Breakpoints são habilitados mikroICD opera em Tempo-Real modo, por isso vai apoiar apenas no seguinte conjunto de comandos: Iniciar o depurador [F9], Execute o depurador Pausa / [F6] e Parar Debugger [Ctrl + F2]. Uma vez que o avançado Ponto de interrupção é atingido, o recurso Advanced Breakpoints podem ser desativadas e mikroICD depuração pode ser continuado com conjunto completo de comandos. Se for necessário, Advanced Breakepoints pode ser reativado sem reiniciar mikroICD. Nota: Número de pontos de interrupção avançada é igual ao número de Hardware-break pontos e que depende de MCU utilizado.
114
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC mikroICD
Programa de Ruptura de Memória
Memória do Programa Break é usado para definir o ponto de interrupção Avançado para específico endereço na memória do programa. Por causa do PIC pipelining exe programa mecanismo de cução pode parar de instruções de um ou dois após o endereço inserido no Endereço de campo. Valor inscrito no Endereço campo deve ser em formato hexagonal.
Nota: Quebra de memória do programa pode usar a opção Passcount. O programa de execu- ção irá parar quando o endereço do programa especificado é atingido durante o tempo N-ésima onde N é o número de inscritos no Passcount de campo. Quando alguns avançada Breakpoint interrompe a execução do programa, para todos os contadores passcount avançada Breakpoints será apagado.
Programa de Ruptura de Memória
Memória do Programa Break é usado para definir o ponto de interrupção avançada para o específico endereço na memória do programa. Por causa do PIC pipelining exe programa mecanismo de cução pode parar um ou duas instruções após o endereço digitado no endereço de campo. O valor informado no campo de endereço deve ser em formato hexagonal.
Nota: Quebra de memória do programa pode usar a opção Passcount. O programa de execu- ção irá parar quando o endereço do programa é especificado chegou o tempo N-ésima onde N é o número de inscritos no Passcount de campo. Quando alguns avançada Breakpoint interrompe a execução do programa, para todos os contadores passcount avançada Breakpoints será apagado.
Arquivo Registre-Break
Arquivo Registre-Break pode ser usado para interromper a execução de código quando acesso leitura / gravação para o local específico da memória de dados ocorre. Se Acesso de leitura é selecionado, o Arquivo Registre Igualdade opção pode ser usada para definir o valor correspondente. O programa de execu- ção será interrompido quando o valor lido a partir da localização de memória de dados especificado é igual ao número escrito no Valor de campo. Os valores inscritos no Endereço e Valor campos devem ser em formato hexagonal.
Nota: Arquivo Registre-Break também pode usar a opção Passcount da mesma forma como Memória do Programa Break.
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido 115
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3 mikroICD mikroC PRO para PIC
Emulador de Recursos Evento Breakpoints
Ruptura em Underflow / Stack Overflow: não implementado. Ruptura em Watchdog Timer: não implementado. Ruptura no sono: pausa na instrução SLEEP. instrução SLEEP não será executados. Se você optar por continuar a depuração mikroICD [F6] em seguida, o pró- grama de execução terá início a partir da primeira instrução após a instrução SLEEP.
Cronômetro Cronômetro usa Breakpoint # 2 e Breakpoint # 3 Como ponto de partida e as condições Stop- ções. Para usar o cronômetro define estes dois pontos de interrupção e verificar o Habilitar Cronômetro checkbox. opções de cronômetro: Parado na condição de início
Parado em Iniciar Condição (Breakpoint # 2): quando marcada, a execução do programa vai parar na Breakpoint # 2. Caso contrário, Breakpoint # 2 será usado somente para iniciar o cronómetro. Parado em Parar Condição (Breakpoint # 3): quando marcada, a execução do programa vai parar na Breakpoint # 3. Caso contrário, Breakpoint # 3 será usado somente para parar o cronômetro. Reset Cronómetro na Run: quando marcada, o cronômetro será apagada antes continuando a execução do programa e à contagem próximo vai começar do zero. Outros- sábio, a contagem próximo terá início a partir do valor anterior Cronómetro
116
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
4
mikroC PRO para PIC Especificidades
Os tópicos a seguir abordam as especificidades da mikroC PRO compilador para PIC:
- Questões ANSI Standard - Globals e constantes predefinidas - Acessando bits individuais - Interrompe - PIC Ponteiros Directivas Linker - - Built-in Rotinas - Otimização de Código - Memória especificadores de tipo
117
www.mecatronicadegaragem.blogspot.com
118 - E E SOLUÇÕES PARA PARA MUNDIAL
CAPÍTULO 4 Especificidades
mikroC PRO para PIC
Problemas ANSI Standard Divergência em relação ao padrão ANSI C - Tentativa declarações não são suportados. Idioma Exstensions C mikroC PRO para PIC tem conjunto adicional de palavras-chave que não pertencem ao o ANSI Palavras-chave linguagem padrão C:
- - - - - - -
código dados rx em sbit bit sfr
Tópicos relacionados: Palavras-chave, PIC específicas
Globals e constantes predefinidas
Para facilitar a programação dos PIC MCUs conformes, o mikroC PRO para PIC imple- mentos uma série de variáveis globais e constantes predefinidas.
Todos os PIC Registos SFR e seus pedaços estão implicitamente declarados como variáveis globais. Estes identificadores possuem uma ligação externa, e são visíveis na projeto inteiro. Ao criar um projeto, o mikroC PRO para PIC incluirá uma adequada (*) arquivo da pasta defs, contendo declarações de disponíveis Registos SFR e constantes.
Para um conjunto completo de variáveis globais e constantes predefinidas, procure "Defs" na mikroC PRO para PIC pasta de instalação, ou sonda o Assistente de código para letras específicas (Ctrl + Espaço no editor de código).
Mikroelektronika - SOFTWARESOFTWAREHARDWAREHARDWARE SOLUTIONSEMBEDDEDEMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4
mikroC PRO para PIC Especificidades
nível de projectos predefinidos define
Existem quatro níveis pré-projeto define, para qualquer projeto que você faz. Estes define se baseiam em valores que você digitou / editado no projeto atual:
-
-
-
-
Primeiro um é igual ao nome do dispositivo selecionado para o projeto ou seja, se 16F887 é dispositivo selecionado, em seguida, 16F887 token será definida como 1, então ele pode ser usado para compilação condicional:
# Ifdef P16F887 ... # Endif
A segunda é __FOSC__ valor da freqüência (em kHz) para os quais o projeto é construído. A terceira é para a identificação mikroC PRO para PIC compilador:
# Ifdef __MIKROC_PRO_FOR_PIC__ ... # Endif
um quarto é para identificar a versão de compilação. Por exemplo, se desejar construir uma versão Sion é de 142, o usuário deve colocar isso no seu código:
# If __MIKROC_PRO_FOR_PIC_BUILD__ == 142 ... # Endif
O usuário pode definir nível de projeto personalizado define.
Bits Acesso Individual
A mikroC PRO para PIC permite que você acesse os bits individuais de variáveis de 8 bits. É também suporta tipos de dados e pouco sbit
Acessar Bits individuais de Variáveis
Se você estiver familiarizado com um MCU particular, você pode acessar bits pelo nome:
/ / Bit Clear Global Interrupt (GIE) GIE_bit = 0;
Além disso, você pode simplesmente usar o seletor de membro direto (.) Com uma variável, seguido por um dos identificadores B0, B1, ... , B7, ou F0, F1, ... F7, com F7 sendo o mais sig- pouco significativa:
/ / 0 em pouco claras registo INTCON INTCON.B0 = 0; / / Bit Conjunto 5 em ADCON0 registo ADCON0.F5 = 1;
119
www.mecatronicadegaragem.blogspot.com
- 119
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4 Especificidades
mikroC PRO para PIC
Não há necessidade de qualquer declaração especial. Este tipo de acesso seletivo é um característica intrínseca de mikroC PRO para PIC e pode ser usado em qualquer lugar do código. Iden- tifiers B0-B7 não são sensíveis e têm um espaço específico. Você pode sobre- montá-los com seus próprios membros B0-B7 dentro de qualquer estrutura dada. Veja Globals e constantes predefinidas para obter mais informações sobre nomes de registo / bit. Nota: Se visando a portabilidade, evitar este estilo de acessar bits individuais, use o bit campos. tipo sbit A mikroC PRO para PIC compilador tem sbit tipo de dados que oferece acesso a bits SFR endereçável. Você pode acessá-los da seguinte forma: sbit LEDA em PORTA.B0; sbit bit_name em <bit-position> name.B SFR; sbit LEDB em PORTB.F0; sbit bit_name em <bit-position> SFR-name.F;
/ / Se você estiver familiarizado com um MCU em particular e os seus portos e di- registros do Regulamento (TRIS), você pode acessar bits por seus nomes: sbit LEdC em RC0_bit; sbit bit_name em R <port-letter> _bit <bit-position>;
sbit TRISC0 em TRISC0_bit; sbit bit_name em TRIS <port-letter> _bit <bit-position>; tipo bit A mikroC PRO para PIC compilador fornece um pouco o tipo de dados que podem ser utilizados para vari- declarações capaz. Não pode ser usado para lista de argumentos e valores de retorno de função.
bit bf;
/ / Variável de bit /
Não existem ponteiros para variáveis de bits:
bit * Ptr;
/ / Inválido
Uma matriz do tipo bit não é válido:
bit arr [5];
/ / Inválido
120
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4
mikroC PRO para PIC Especificidades
Nota:
- Variáveis Bit não pode ser inicializado. - Bit variáveis não podem ser membros de estruturas e de sindicatos. - Variáveis Bit não têm endereços, portanto operador unário & (endereço) não é aplicáveis a essas variáveis.
Temas relacionados: Campos de bits, globais e constantes predefinidas
Interrupções
Interrupções podem ser facilmente manipulados por meio da palavra reservada interrupção. mikroC PRO para PIC implictly declara função interrupção que não pode ser declarado novamente. Sua protótipo é:
vazio interrupção (void);
Para P18 baixo priorty interrompe palavra reservada é interrupt_low:
vazio interrupt_low (void);
Está prevista para escrever sua própria definição (corpo da função) para lidar com interrupções em sua aplicação.
mikroC PRO para PIC salva a SFR seguinte ao entrar na pilha interrupção e estala-los de volta em cima do retorno:
- Família PIC12: W, STATUS, FSR, PCLATH - Família PIC16: W, STATUS, FSR, PCLATH - Família PIC18: FSR (Contexto de rápido é usado para salvar WREG, BSR STATUS)
Use o # Pragma disablecontexsaving para instruir o compilador para automatica- ly executar contexto de mudança. Isto significa que não regiser será salvo / restaurado o compilador de entrada / saída da rotina de interrupção do serviço. Isso permite que o usuário manualmente escrever código para salvar registros em cima da entrada e para restaurar -los antes saída da interrupção.
Mikroelektronika - Soluções de soft
www.mecatronicadegaragem.blogspot.com
ware e hardware para o mundo embutido 121
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4 Especificidades
mikroC PRO para PIC
prioridade P18 interrompe Nota: Para a família P18 tanto interrompe alta e baixa são suportados.
1. função com o nome interrupção será vinculado como ISR (rotina de serviço de interrupção)
para o elevado nível de interrupção 2. função com o nome interrupt_low será vinculados como ISR para baixo nível inter
rupt_low Se a função prioritária de interrupção é para ser usado, então o usuário deve definir a SFR adequado bits para habilitá-lo. Para mais informações consultar os dados para o dispositivo específico. Chamadas de função de interrupção Chamando funções a partir do (interrupção) de rotina é agora possível. O compilador se preocupa com os registros a ser utilizado, tanto na "interrupção" e, em thread "main", e executa "inteligentes" contexto de alternância entre os dois, poupando apenas os registros que tenham sido usado em ambos reentrância funções threads.Check. Exemplos de interrupção Aqui está um exemplo simples de lidar com as interrupções de TMR0 (Se não houver outras interrupções são permitidos): vazio interrupt () {
contador + +; TMR0 = 96; INTCON = $ 20;
}
Em caso de múltiplas interrupções ativadas, você precisará testar qual das interrupções ocorreu e, em seguida, prosseguir com o código apropriado (tratamento de interrupções): vazio interrupt () {
se (INTCON.TMR0IF) { contador + +; TMR0 = 96; INTCON.TMR0F = 0;
} else if (INTCON.RBIF) {
contador + +; TMR0 = 96; INTCON.RBIF = 0;
} }
122
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4
mikroC PRO para PIC Especificidades
Linker directivas
O mikroC PRO usa um algoritmo interno para distribuir objetos na memória. Se você precisa ter uma variável ou rotina pré-definida no endereço específico, use o link directivas er absoluta e org.
Directiva absoluta
Directiva absoluta especifica o endereço inicial na memória RAM para uma variável. Se a vari- poder é multi-byte, bytes maior será armazenado nos locais consecutivos.
Directiva absoluta é anexado à declaração de uma variável:
curto x absoluta 0x22; / / Variável x vai ocupar 1 byte no endereço 0x22
int y absoluta 0x23; / / Variável y ocupará 2 bytes em endereços 0x23 e 0x24
Tenha cuidado ao usar a diretiva de absoluta, como você pode sobrepor-se duas variáveis acidente. Por exemplo:
char i absoluta 0x33; / / Variável i vai ocupar 1 byte no endereço 0x33
tempo jjjj absoluta 0x30; / / Variável ocupará 4 bytes de 0x30, 0x31, 0x32, 0x33, assim, / / Mudando mudanças i byte mais alto jjjj, ao mesmo tempo, e vice-versa
org Directiva
Directiva org especifica um endereço a partir de uma rotina em ROM.
Directiva org é anexado à definição da função. Directivas para defin não- declarações ING vai ser ignorado, com um aviso adequado, emitido pelo vinculador.
Aqui está um exemplo simples:
vazio func (int par) org 0x200 { / / Função terá início no endereço 0x200
nop asm; }
É possível usar org directiva com as funções que são definidos externamente (como biblioteca de funções). Basta adicionar org directiva funcionar declaração:
Mikroelektronika - Soluções de software e hardware para o mundo embutido
123
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4 Especificidades
mikroC PRO para PIC
vazio UART_Write1 (char de dados) org 0x200;
Nota: Directiva org pode ser aplicado a qualquer rotina, exceto para interromper. orgall Directiva Se o usuário quer colocar suas rotinas, constantes, etc, além de um endereço especificado no ROM, # Pragma orgall directiva deve ser usado: # Pragma orgall 0x200
Directiva funcorg Você pode usar o # Pragma funcorg diretiva para especificar o endereço inicial de um rou- tine em CD usando o nome de rotina, apenas:
# Pragma funcorg <func_name>
<starting_address>
Relacionados tópicos: chamadas indiretas Função
Solicita função indireta
Se o linker encontra uma chamada de função indireta (através de um ponteiro para função), ele assume que qualquer um dos endereços funções de que foram tomadas em qualquer lugar do programa, pode ser chamado a esse ponto. Use o # Pragma Funcall directiva para instruir o link er que as funções podem ser chamados indiretamente da função atual:
# Pragma Funcall <func_name> <called_func> [, <called_func> ,...]
A pragma correspondente deve ser colocado no módulo de origem onde a função nome_da_função é implementada. Este módulo também deve incluir declarações de todos os funcio- ções constantes do called_func lista.
Estas funções serão ligados, se a função nome_da_função é chamado no código não-mat ter se algum deles foi chamado ou não.
Nota: O # Pragma Funcall directiva pode ajudar o vinculador a função de otimizar o quadro alocação no compilados pilha.
Tópicos relacionados: Linker directivas
124
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Lo (longa número);
Retorna Retorna o menor de 8 bits (byte) de número, os bits 0 .. 7.
Descrição
Função retorna o byte de menor número. Função não interpreta bit pat- nhece o número - ele simplesmente devolve 8 bits como os encontrados em registo.
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas
Requer Os argumentos devem ser variável do tipo escalar (isto é, aritmética Tipos e
t i ) Exemplo d = 0x1AC30F4;
tmp = Lo (d) / / Igual 0xF4
CAPÍTULO 4
mikroC PRO para PIC Especificidades
Criada em Rotinas
mikroC PRO para PIC compilador fornece um conjunto de úteis built-utilidade em funções. Built-in funções não não requer qualquer cabeçalho arquivos a serem incluídos, você pode usá-los em qualquer parte do seu projeto.
Criada em rotinas são implementadas como "Inline", ou seja, o código é gerado no local da chamada, de modo que o chamada não imputadoso limite de chamadas aninhadas. As únicas exceções são Vdelay_ms, Delay_Cyc e Get_Fosc_kHz que são rotinas C real.
Nota: Lo, Hi, Ensino Superior e Maior funções não estão implementadas no compilador mais. Se você quero usar estas funções você deve incluir built_in.h em seu projeto.
Lo
- - - - - - - - - - -
Lo Oi Superior Maior Delay_us Delay_ms Vdelay_ms Delay_Cyc Clock_Khz Clock_Mhz Get_Fosc_kHz
Mikroelektronika - Soluções de software e hardware para o mundo embutido
125
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Oi (long número);
Retorna Retorna junto ao menor de bytes de número, os bits 8 .. 15.
Descrição
A função retorna ao lado do byte mais alto de número. A função não interpretar padrões de bits de número - ele simplesmente devolve 8 bits como os encontrados em registo.
Este é um "Inline" rotina, o código é gerado no local da chamada, assim chamada a não conta contra o limite de chamadas aninhadas
Requer Os argumentos devem ser variável do tipo escalar (isto é, aritmética Tipos e
t i ) Exemplo d = 0x1AC30F4;
tmp = Hi (d); / / 0x30 Equals
Protótipo unsigned short Superior (long número);
Retorna Retorna ao lado do byte mais alto de número, os bits 16 .. 23.
Descrição
Função retorna o byte mais alto de número. Função não interpreta bit pat- nhece o número - ele simplesmente devolve 8 bits como os encontrados em registo.
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas
Requer Os argumentos devem ser variável do tipo escalar (isto é, aritmética Tipos e
t i ) Exemplo d = 0x1AC30F4;
tmp = Superior (d) / / Igual 0xAC
CAPÍTULO 4 Especificidades
Oi
Superior
mikroC PRO para PIC
126
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Delay_us (const time_in_us);
Retorna Nada.
Descrição
Cria um atraso de software no período de time_in_us microssegundos (uma constante). Faixa de aplicáveis constantes depende da freqüência do oscilador.
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas. Esta rotina gera loops aninhados uso de registros R13, R12, R11 e R10. O número de registros utilizado varia de 0-4, dependendo do pedido time_in_us.
Requer Nada.
Exemplo Delay_us (10); / * Dez microssegundos pausa * /
Protótipo unsigned short Mais alto (long número);
Retorna Retorna o byte mais alto de número, os bits 24 .. 31.
Descrição
A função retorna ao lado do byte mais alto de número. A função não interpretar padrões de bits de número - ele simplesmente devolve 8 bits como os encontrados em registo.
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas
Requer Os argumentos devem ser variável do tipo escalar (isto é, aritmética Tipos e
t i ) Exemplo d = 0x1AC30F4;
Maior tmp = (d); / / 0x01 Equals
CAPÍTULO 4
mikroC PRO para PIC
Maior
Delay_us
Especificidades
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
127
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Vdelay_ms (unsigned time_in_ms);
Retorna Nada.
Descrição
Cria um atraso de software no período de time_in_ms milissegundos (uma variável). atraso gerado não é tão preciso quanto o atraso criado por Delay_ms.
Note-se que Vdelay_ms é uma função da biblioteca, em vez de um built-in de rotina, é pre- tantes neste tópico por uma questão de conveniência.
Requer Nada.
Exemplo pausa = 1000; / / ... Vdelay_ms (pausa); / / ~ um segundo de pausa
Protótipo vazio Delay_ms (const time_in_ms);
Retorna Nada.
Descrição
Cria um atraso de software no período de time_in_ms milissegundos (uma constante). Faixa de constantes aplicável depende da freqüência do oscilador.
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas. Esta rotina gera loops aninhados uso de registros R13, R12, R11 e R10. O número de registros utilizado varia de 0-4, dependendo do pedido time_in_ms.
Requer Nada.
Exemplo Delay_ms (1000); / * * Um segundo de pausa /
CAPÍTULO 4 Especificidades
Delay_ms
Vdelay_ms
mikroC PRO para PIC
128
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Delay_Cyc (char Cycles_div_by_10);
Retorna Nada.
Descrição
Cria um atraso baseado no relógio MCU. Atraso dura 10 vezes o param-entrada eter em ciclos MCU.
Note-se que Delay_Cyc é uma função da biblioteca, em vez de um built-in de rotina, é pre- tantes neste tópico por uma questão de conveniência. Há limitações para Cycles_div_by_10 valor. Valor Cycles_div_by_10 deve estar entre 3 º e 255.
Requer Nada.
Exemplo Delay_Cyc (10); / * ciclos Cem MCU pausa * /
Protótipo não assinado Clock_Khz (void);
Retorna relógio do dispositivo em KHz, arredondado para o número inteiro mais próximo.
Descrição Função relógio do dispositivo retorna em KHz, arredondado para o inteiro mais próximo.
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a
Requer Nada.
Exemplo clk = Clock_Khz ();
CAPÍTULO 4
mikroC PRO para PIC
Delay_Cyc
Clock_Khz
Especificidades
Mikroelektronika - Soluções de software e hardware para o mundo embutido
129
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned long Get_Fosc_kHz (void);
Retorna relógio do dispositivo em KHz, arredondado para o número inteiro mais próximo.
Descrição Função relógio do dispositivo retorna em KHz, arredondado para o inteiro.
Note-se que Get_Fosc_kHz é uma função da biblioteca, em vez de um built-in de rotina, é
pre- Requer Nada.
Exemplo clk = Clock_Khz ();
Protótipo unsigned short Clock_Mhz (void);
Retorna Dispositivo clock em MHz, arredondado para o número inteiro mais próximo.
Descrição Função relógio do dispositivo retorna em MHz, arredondado para o número inteiro
mais próximo.
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a Requer Nada.
Exemplo clk = Clock_Mhz ();
CAPÍTULO 4 Especificidades mikroC PRO para PIC
Clock_Mhz
Get_Fosc_kHz
Otimização de Código
Optimizer foi adicionada para estender a utilização do compilador, reduzir a quantidade de código de gener- acelerada e acelerar sua execução. As principais características são:
dobrar Constant
Todas as expressões que podem ser avaliados em tempo de compilação (ou seja, são constantes) estão sendo substituídos pelos seus resultados. (3 + 5 -> 8);
constante de propagação
Quando um valor constante é sendo atribuído a uma determinada variável, o compilador reconhece isso e substitui o uso da variável constante no código que segue, enquanto o valor de uma vari- poder permanece inalterada.
130
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4
mikroC PRO para PIC Especificidades
Copie propagação
O compilador reconhece que duas variáveis têm o mesmo valor e elimina um deles ainda no código.
Valor numeração
O compilador "reconhece" se duas expressões produzem o mesmo resultado e não pode- portanto eliminar o cálculo inteiro para um deles.
"Código Dead" eliminação
A trechos de código que não estão sendo usados em outras partes do programa não afetam o resultado final da aplicação. Eles são automaticamente removidos.
alocação de pilha
registradores temporários ("Pilhas") estão sendo usados de forma mais racional, permitindo COM MUITO expressões complexas a ser avaliado com um mínimo consumo de pilha.
otimização vars locais
N variáveis locais estão sendo usados, se o seu resultado não afeta alguns dos globais ou variáveis voláteis.
Melhor geração de código e otimização local
Código geração é mais consistente e mais atenção é pago para implementar es- soluções específicos para o código "tijolos de construção" que reduzem ainda mais o tamanho do código de saída.
Tópicos relacionados: especificidades PIC, mikroC PRO para PIC específicos, tipos específicos de memória
Mikroelektronika - Soluções de software e hardware para o mundo emb
www.mecatronicadegaragem.blogspot.com
utido 131
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4 Especificidades mikroC PRO para PIC
132
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
5
PIC ESPECIFICOS
A fim de obter o máximo de seu mikroC PRO para PIC compilador, você deve estar familiarizados com certos aspectos da PIC MCU. Este conhecimento não é essencial, mas pode fornecer uma melhor compreensão das CPIs ' capacidades e limitações, e seus impacto sobre a escrita de código.
133
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 5 PIC Especificidades
mikroC PRO para PIC
Tipos de Eficiência Primeiro de tudo, você deve saber que ALU PIC, que realiza operações aritméticas, é otimizado para trabalhar com bytes. Embora mikroC PRO para PIC é capaz de han- manuseio tipos de dados muito complexos, PIC pode engasgar com elas, especialmente se você estiver de trabalho ção em alguns dos modelos mais antigos. Isto pode aumentar o tempo necessário para realizar mesmo operações simples. conselhos Universal é a utilização de o menor possível tipo em cada situação. Ela se aplica a toda a programação em geral, e duplamente com microcontroladores. Conheça a sua ferramenta. Quando se chega ao cálculo, nem todos os microcontroladores PIC são de desempenho igual. Por exemplo, a família PIC16 carece de recursos de hardware para multi- ply dois bytes, por isso é compensado por um algoritmo de software. Por outro lado, PIC18 família tem HW multiplicadores, e como resultado, a multiplicação de obras consideravelmente mais rápido. Limitações chamadas aninhadas chamada aninhadas representa uma chamada de função dentro do corpo da função, quer para si mesmo (recursivo chamadas) ou para outra função. chamadas de funções recursivas são suportados pelo mikroC PRO para PIC mas com limitações. chamadas de funções recursivas não podem conter qualquer função parâmetros e variáveis locais, devido às limitações do PIC de memória e pilha. mikroC PRO para PIC limita o número de não-recursivo chamadas aninhadas para:
- 8 chamadas para a família PIC12, - 8 chamadas para a família PIC16, - 31 chamadas para a família PIC18.
Note-se que alguns dos built-in rotinas não contam contra esse limite, devido à sua "Inline" implementação. Número de chamadas aninhadas permitido diminui um, se você usar qualquer uma das segui- ing operadores do código: / *%. Isso diminui ainda mais se você usar as interrupções no programa. Número de reduções é especificada pelo número de funções chamadas a partir de inter- rupt. Verifique reentrância funções. Se o número permitido de chamadas aninhadas for excedido, o compilador apresentará um relatório de uma pilha overflow erro.
www.mecatronicadegaragem.blogspot.com
134
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 5
mikroC PRO para PIC PIC Especificidades
PIC18FxxJxx Especificidades
Endereço SFR compartilhados
mikroC PRO para PIC não fornece ajuste automático de bits para suplente acessando reg- Ister. Este é um novo recurso adicionado ao pic18fxxjxx família e será apoiado no futuro. Em vários locais no banco SFR, um único endereço é usado para acessar os dois dife- ent registros de hardware. Nestes casos, um "Legado" registro do PIC18 padrão SFR conjunto (como OSCCON, T1CON, etc) as suas quotas de endereço com um suplente, reg- Ister. Estes registos alternativos estão associadas com opções de configuração avançada para os periféricos, ou com o novo dispositivo não os recursos incluídos na SFR PIC18 padrão mapa. Uma lista completa de endereços de registro compartilhado e os registos associados lhes é fornecido na ficha técnica.
PIC16 Especificidades
Quebrando Páginas
Em aplicações orientadas para PIC16, nenhuma única rotina deve exceder uma página (2.000 instruções). Se a rotina não cabe em uma página, vinculador irá reportar um erro. Quando confrontar com este problema, talvez você devesse repensar o design do seu aplicativo - tente quebrar a rotina especial em vários pedaços, etc
Limites da abordagem indireta através da RSF
Ponteiros com PIC16 são "Perto": eles carregam apenas abaixo de 8 bits do endereço. Com- empilhadeira automaticamente limpar o bit 9 em cima da partida, de modo que os ponteiros vão se referir a bancos 0 e 1. Para acessar os objetos em bancos de 2 ou 3 através de ponteiro, o usuário deve man- vamente definir a PIA, e restaurar a zero após a operação. As regras se aplicam a declarou qualquer abordagem indireta: matrizes, estruturas e atribuições dos sindicatos, etc
Nota: É muito importante cuidar do PIA corretamente, se você pretende seguir esta abordagem. Se você encontrar esse método é inadequado, com muitas variáveis, você pode considerar a atualização para PIC18.
Nota: Se você tem muitas variáveis no código, tente reorganizá-las com o vinculador directiva absoluta. Variáveis que são abordados apenas diretamente devem ser transferidos para 3 e 4 bancos para aumentar a eficiência.
tópicos relacionados: mikroC PRO para PIC especificidades
Mikroelektronika - Soluções de software e hardware para o mundo embutido
135
www.mecatronicadegaragem.blogspot.com
Descrição
Este especificador de memória permite a variável a ser armazenado no espaço de Rx (arquivo Register).
Nota: Na maioria dos casos, não haverá espaço suficiente para as variáveis do
usuário em R N il d R
Exemplo / / Coloca y no Rx espaço y rx sfr char;
Descrição Este especificador de memória é usado quando a variável que armazena os dados
d SRAM i t Exemplo / / Coloca PORTG nos dados ram
dados sfr 0x65 PORTG unsigned short absoluta;
Descrição A código tipo de memória pode ser usada para a atribuição constantes no programa
ó i Exemplo / / Coloca txt na memória do programa
const char código txt [] = "ENTER PARAMETER:";
CAPÍTULO 5 PIC Especificidades mikroC PRO para PIC
TIPO DE MEMÓRIA especificadores
A mikroC PRO para PIC suporta o uso de todas as áreas de memória. Cada variável pode ser explicitamente atribuído a um espaço de memória específicos, incluindo um especificador de tipo de memória na declaração, ou implicitamente atribuído.
Os especificadores seguintes tipos de memória podem ser usados:
- - - -
código dados rx sfr
especificadores de tipo de memória podem ser incluídas no declaração da variável.
Por exemplo:
data_buffer dados char / / coloca data_buffer nos dados ram const char código txt [] = "ENTER PARAMETER:" / / coloca o texto na memória do programa
código
dados
rx
136
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Descrição Este especificador de memória em combinação com (rx, dados) permite ao utilizador aceder es- cial registros função. Ele também instrui o compilador para manter mesmo identificador em C
Exemplo rx sfr y char;
CAPÍTULO 5
mikroC PRO para PIC PIC Especificidades
sfr
Nota: Se nenhum dos especificadores de memória são usadas quando se declara uma variável, dados especificador será definir como padrão pelo compilador.
Tópicos relacionados: Acesso individual bits, SFR, constantes, funções
Mikroelektronika - Soluções de software e hardware para o mundo embutido
137
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 5 PIC Especificidades mikroC PRO para PIC
138
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
6
mikroC PRO para PIC Referência da Linguagem
O mikroC PRO para PIC Language Reference descreve a sintaxe, a semântica ea execução do mikroC PRO para a linguagem PIC.
O objectivo deste guia de referência é fornecer uma mais compreensível descrição do o mikroC PRO para PIC linguagem para o usuário.
www.mecatronicadegaragem.blogspot.com
139www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem
- Elementos lexicais
Espaços em branco Comentários Tokens
Constantes Constantes Resumo Integer Constantes Floating Point Constantes Constantes de caracteres String Constantes Enumeração Constantes Constantes ponteiro Expressão constante
Palavras-chave Identificadores Punctuators
- Conceitos
Objetos e lvalues Escopo e visibilidade Espaços de nome Duração
- Tipos
Tipos Fundamentais Aritmética Tipos Enumerações Tipo Void
Tipos derivados Matrizes Ponteiros
Introdução aos Ponteiros Aritmética de ponteiro
Estruturas Introdução às estruturas Trabalhando com Estruturas Estrutura de Acesso ao Portal Sindicatos Campos Bit
Tipo Conversões Standard Conversões Typecasting Explicit
mikroC PRO para PIC
140
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
- Declarações
Introdução às declarações Linkage Classes de armazenamento Tipo, qualificação Especificador typedef ASM Declaração Inicialização
- Funções
Introdução às Funções Chamadas de função e argumento de conversão
- Operadores
Introdução aos Operadores Operadores Precedência e Associatividade Operadores Aritméticos Os operadores relacionais Operadores bit a bit Lógico Opeartors Operadores Condicionais Operadores de Atribuição Operador sizeof
- Expressões
Introdução a Expressões Vírgula Expressões
- Declarações
Introdução Rotulado Demonstrações Expressão Demonstrações Instruções de Seleção
Se a Declaração Switch Declaração
Instruções iteração (Loops) Enquanto a Declaração Do Declaração Para a declaração
Ir Demonstrações Break e continue Goto Declaração Instrução Return
Declarações compostas (blocos)
Referência da Linguagem
Mikroelektronika - Soluções de software e hardware para o mundo embutido
141
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem
- Preprocessor
Introdução à pré-processador Preprocessor directivas Macros Inclusão de arquivos Preprocessor Operadores Compilação condicional
mikroC PRO para PIC
142
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
LEXICAL Visão geral sobre elementos
Os tópicos a seguir fornecem uma definição formal do mikroC PRO para PIC lexical elementos. Eles descrevem as diferentes categorias de unidades de palavra-like (tokens), reconheceu pela mikroC PRO para a PIC.
Na fase de simbolização de compilação, o arquivo de código fonte é analisado (isto é, mano- ken baixo) em tokens e espaços em branco. Os tokens no mikroC PRO para PIC são derivada de uma série de operações realizadas em seus programas pelo compilador e sua built-in pré-processador.
WHITESPACE
Espaço em branco é um nome coletivo dado a espaços (brancos), horizontais e verticais tabulações, caracteres de nova linha e comentários. Espaços em branco podem servir para indicar onde fichas de início e fim, mas para além desta função, qualquer excedente espaços em branco são descartados. Por exemplo, duas seqüências
int i; flutuar f;
e
int
i;
flutuar f;
são lexicalmente equivalente e analisar de forma idêntica para dar seis fichas:
int i ; flutuar f ;
Mikroelektronika - Software e Soluções de hardware para Embedded World
143
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Espaço em branco em Strings
Os caracteres ASCII representando branco pode ocorrer dentro de literais de cadeia. Em que caso eles sejam protegidos contra o processo de análise normal (eles permanecem como parte da da seqüência). Por exemplo,
char [nome] = "mikro foo";
analisa em sete fichas, incluindo uma única seqüência literal token:
char nome [ ] = "Mikro foo" / * Apenas um token aqui! * / ;
Linha de emenda com contrabarra (\)
Um caso especial é uma linha termina com uma barra invertida (\). Ambos barra invertida e nova linha caracteres são descartados, permitindo que duas linhas físicas de um texto a ser tratados como uma unidade. Então, o seguinte código
"MikroC PRO \
Compilador para PIC "
analisa em "MikroC PRO para PIC Compiler". Consulte a String Constantes para mais da informação.
144
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
COMENTÁRIOS
Os comentários são partes de um texto usado para anotar um programa e são tecnicamente outra forma de espaço. Os comentários são para uso do programador só, pois eles são retirados do texto de origem antes da análise. Há duas formas para delinear com- mentos: o método de C e C + + método. Ambos são apoiados por mikroC PRO para PIC.
Você também deve seguir as orientações sobre a utilização de espaços em branco e os delimitadores de comentários, discutido mais adiante neste tópico para evitar problemas de portabilidade outros.
comentários C
C comentário é qualquer seqüência de caracteres colocados após a par / símbolo *. A com- mento termina na primeira ocorrência do * / par após a inicial / *. Toda a seqüência, incluindo quatro símbolos delimitador de comentário, é substituídos por um espaço depois expansão de macro.
Na mikroC PRO para a PIC,
int / * Tipo * i / / * identificador * /;
analisa como:
int i;
Note-se que o mikroC PRO para PIC não suporta um colar nonportable token estratégia usando /**/. Para mais informações sobre colar token, consulte o Preprocessor Operadores.
C + + comentários
A mikroC PRO para PIC permite que os comentários de uma linha usando duas barras adjacentes (//). O comentário pode começar em qualquer posição e se estende até a próxima linha nova.
O código a seguir
int i;
/ / Isto é um comentário
int j;
analisa como:
int i; int j;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
145
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
comentários Nested
ANSI C não permite comentários aninhados. A tentativa de um ninho de comentário como esse
/ *
int / * declaração * / i, / *
falha, porque o âmbito do primeiro / * termina no primeiro * /. Isso nos dá
i; * /
o que geraria um erro de sintaxe.
146
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Idioma Referência
TOKENS
Token é o menor elemento de um programa compilador C que pode reconhecer. A pars- er separa os tokens do fluxo de entrada, criando o maior símbolo possível usando os caracteres de entrada em uma esquerda para a direita-scan.
A mikroC PRO para PIC reconhece os seguintes tipos de fichas:
- - - - -
palavras-chave identificadores constantes operadores pontuadores (também conhecido como separadores)
Símbolo de Extração Exemplo
Aqui está um exemplo da extração de token. Dê uma olhada no código exemplo a seguir seqüência:
inter =
a + + + b;
Primeiro, note que inter seria analisado como um identificador único, em vez não como a chave- palavra int seguido pelo identificador er.
O programador que tem escrito o código pode ter a intenção de escrever inter = um + (+ + b), mas não funciona dessa maneira. O compilador iria analisá-lo no sete fichas a seguir:
inter = um + + + b ;
/ / / / / / / / / / / / / /
variável identificador operador de atribuição variável identificador operador postIncrement operador de adição variável identificador terminador de instrução
Note-se que + + + analisa como + + (O mais longo possível token), seguido por +.
De acordo com as regras de precedência de operador, a nossa seqüência de código é, na verdade:
inter (a + +) + b;
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
147
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
CONSTANTS
Constantes ou literais são símbolos que representam fixo numérico ou valores de caracteres.
A mikroC PRO para PIC suporta:
- - - - -
constantes inteiro constantes ponto flutuante constantes de caracteres Constantes cadeia de caracteres (strings literais) constantes de enumeração
A tipo de dados de uma constante é deduzido pelo compilador usando pistas como um valor numérico e formato usado no código-fonte.
Integer Constantes
As constantes inteiras podem ser decimal (base 10), hexadecimal (base 16) base, binários ( 2) ou octal (base 8). Na ausência de sufixos primordiais, o tipo de dados de um constante inteira é derivado do seu valor.
Long e sufixos Unsigned
O sufixo L (Ou l) ligado a qualquer força constante que constante a ser representado como um tempo. Da mesma forma, o sufixo U (Ou u) obriga a uma constante a ser não assinado. Ambos L e U sufixos podem ser utilizados com a mesma constante em qualquer forma ou processo: ul, Lu, UL, etc
Na ausência de qualquer sufixo (U, u, L, ou l), uma constante é atribuído o "Menor" de os seguintes tipos, que podem acomodar seu valor: curto, curto não assinado, int, unsigned int long int, int unsigned long.
Caso contrário:
Se uma constante tem o U sufixo, seu tipo de dados será o primeiro dos seguintes que pode acomodar o seu valor: unsigned int, unsigned short, sem assinatura tempo int. Se uma constante tem o L sufixo, seu tipo de dados será o primeiro dos seguintes que podem acomodar o seu valor: long int, int unsigned long. Se uma constante tem tanto L e U sufixos, (LU ou UL), seu tipo de dados será não assinado int tempo.
148
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Valor atribuído à constante Assumindo Tipo
<-2147483648 Erro: Fora da faixa!
-2147483648 - -32769 tempo
-32768 - -129 int
-128 - 127 curto
128 - 255 unsigned short
256 - 32767 int
32768 - 65535 unsigned int
65536 - 2147483647 tempo
2147483648 - 4294967295 unsigned long
> 4294967295 Erro: Fora da faixa!
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Decimais
constantes Decimal de -2147483648 a 4294967295 são permitidos. Constantes excedam esses limites vai produzir uma "Out of range" erro. constantes Decimal não deve usar um zero inicial. Uma constante inteira que tem um zero inicial é interpretá- ed como uma constante octal. Assim,
int i = 10; int i = 010; int i = 0;
/ Decimal * 10 * / / Decimal * 8 * / / * Decimal 0 = 0 * octal /
Na ausência de quaisquer sufixos imperiosa, o tipo de dados de um constante decimal é derivada de seu valor, conforme demonstrado abaixo:
Constantes hexadecimais
Todas as constantes a partir de 0x (Ou 0X) estão a ser tomadas hexadecimal. Na ausência sufixos de qualquer substituição, o tipo de dados de um hexadecimal constante é derivada da seu valor, de acordo com as regras apresentadas acima. Por exemplo, 0xC367 serão trata- ed como unsigned int.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
149
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Binário Constantes
Todas as constantes a partir de 0b (Ou 0B) estão a ser tomadas binário. Na ausência de qualquer excesso de andar sufixos, o tipo de dados de um binário constante é derivada de seu valor, de acordo com as regras apresentadas acima. Por exemplo, 0b11101 serão tratados como curto.
Octal Constantes
Todas as constantes com um zero inicial são tidas como octal. Se uma constante octal contém os dígitos ilegal 8 ou 9, é reportado um erro. Na ausência de qualquer substituindo o sufixo- es, o tipo de dados de uma constante octal é derivado do seu valor, de acordo com as regras apresentados acima. Por exemplo, 0777 serão tratados como int.
Floating Point Constantes
Uma constante de ponto flutuante é composto por:
- Decimal inteiro - Ponto decimal - Decimal fração - e ou E e um expoente inteiro assinado (opcional) - Tipo sufixo: f ou F ou l ou L (Opcional)
Qualquer número inteiro decimal ou fração decimal (mas não ambos) pode ser omitido. Ou dec- ponto imal ou carta e (Ou E) com um expoente inteiro assinado (mas não ambos) pode ser omitir- Ted. Estas regras permitem convencionais e científicas (expoente) notações.
Negativo constantes flutuantes são tomadas como constantes positivas com um operador unário menos (-) como prefixo.
A mikroC PRO para PIC limites constantes de ponto flutuante para o intervalo ± 1,17549435082 * 10-38 ..± 6,80564774407 * 1038.
Aqui estão alguns exemplos:
0. -1.23 23.45e6 2e-5 3E +10 0,09 E34
/ / / / / / / / / / / /
=
= = =
= =
0.0 -1.23 23.45 * 10 ^ 6 2.0 * 10 ^ -5 3.0 * 10 ^ 10 0.09 * 10 ^ 34
A mikroC PRO para PIC de ponto flutuante constantes são do tipo casal. Note-se que o mikroC PRO PIC para a implementação de ANSI Standard considera flutuar e dupla (Juntamente com a long double variante) para ser do mesmo tipo.
150
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Constantes de caracteres
Um personagem constante é um ou mais caracteres entre aspas simples, como 'A', '+', ou '\ N'. No mikroC PRO para PIC, constantes de caractere único são da unsigned int tipo. constantes Multi caracteres são referidos como con-corda balcões de ou literais de cadeia. Para obter mais informações referem-se a String Constantes.
Sequências de Escape
Uma barra invertida (\) é usada para introduzir uma seqüência de escape, que permite uma representação visual de certos caracteres não gráficos. Uma das mais comuns constantes de escape é o caractere de nova linha (\ n). Uma barra invertida é usada com números em octal ou hexadecimal para representar um símbolo ASCII ou controle de código correspondente a esse valor, por exemplo, '\ X3F' para a questão marca. Qualquer valor dentro dos limites legais para o tipo de dados char (0 para 0xFF para o mikroC PRO para PIC) pode ser usado. Números maiores irá gerar o erro do compilador"Fora de alcance". Por exemplo, o número octal \ 777 é maior do que o valor máximo permitido (\ 377) e irá gerar um erro. O primeiro caractere nonoctal ou não hexadecimais encontrados em uma seqüência de escape octal ou hexadecimal marca o fim da seqüência.
Nota: Você deve usar a seqüência \ \ para representar uma barra invertida ASCII, como usado em caminhos do sistema operacional.
A tabela a seguir mostra as seqüências de escape disponíveis:
Seqüência \ A
\ B
\ F
\ N
\ R
\ T
\ V
\ \
\ '
\ "
\?
\ O
\ XH
\ XH
Valor 0x07 0x08 0x0C 0x0A 0x0D 0x09 0x0B 0x5C 0x27 0x22 0x3F
Char BEL BS FF LF CR HT VT \ » '' ? qualquer qualquer qualquer
Descrição sinal audível Retrocesso Formfeed Newline (Avanço de linha) Retorno de carro Tab (horizontal) Vertical Tab Backslash aspas simples (apóstrofo) Aspas duplas Ponto de interrogação S = string de até 3 dígitos octais H = seqüência de dígitos hexadecimais H = seqüência de dígitos hexadecimais
Mikr
www.mecatronicadegaragem.blogspot.com
oelektronika - Soluções de software e hardware para o mundo embutido 151www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Desambiguação
Algumas situações ambíguas podem surgir quando se utiliza seqüências de escape.
Aqui está um exemplo:
Lcd_Out_Cp ("\ x091.0 Intro");
Este destina-se a ser interpretada como \ X09 e "Intro 1.0". No entanto, o mikroC PRO PIC para compila-lo como o número hexadecimal \ X091 e literal de cadeia "0,0 Intro ". Para evitar tais problemas, podemos reescrever o código da seguinte forma:
Lcd_Out_Cp ("\ X09", "1.0 Introdução");
Para obter mais informações sobre a linha anterior, referem-se a String Constantes.
Ambigüidades também pode ocorrer se uma seqüência de escape octal é seguido por um nonoctal dígitos. Por exemplo, as seguintes constantes:
"\ 118"
seria interpretado como um de dois caracteres constante composta dos personagens \ 11 e 8, porque 8 não é um dígito octal legal.
String Constantes
constantes da corda, também conhecido como literais string, são um tipo especial de constantes que armazenar seqüências fixas de caracteres. Uma seqüência literal é uma seqüência de qualquer número de caracteres entre aspas duplas:
"Esta é uma string."
A string nula, ou string vazia, é escrito como "". Uma seqüência literal é armazenada internamente como uma determinada seqüência de caracteres mais um caractere nulo final. Uma seqüência de caracteres nula é armazenado como um único caractere nulo.
Os caracteres entre aspas pode incluir seqüências de escape. Este código, por exemplo:
"\ T \" Nome \ "\ \ \ tAddress \ n \ n"
impressões como isso:
"Nome" \
Endereço
www.mecatronicadegaragem.blogspot.com
152
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
O "nome" é precedido por dois guias, o endereço é precedido por um guia. A linha é seguido por duas novas linhas. A \ " fornece interior aspas. A fuga seqüência de caracteres \ \ é traduzida em \ pelo compilador.
literais string adjacentes separados apenas por espaços em branco são concatenados durante o análise de fase. Por exemplo:
"Este é" apenas "
"Um exemplo".
é equivalente a
"Este é apenas um exemplo."
Continuação de linha com Backslash
Você pode também usar a barra invertida (\) como um caractere de continuação de estender uma string constante através das fronteiras linha:
"Isso é realmente \
uma seqüência de caracteres de uma linha. "
Enumeração Constantes
constantes de enumeração são identificadores definidos no enum declarações do tipo. A identi- verificadores são normalmente escolhido como mnemônicos de contribuir para a legibilidade. Enumeração con- são de balcões de int tipo. Eles podem ser usados em qualquer expressão, onde constantes inteiro são válidos.
Por exemplo:
enum semana {dom = 0, Seg, Ter, Qua, Qui, Sex, Sab};
A identificadores (inquiridores) utilizados devem ser exclusivos dentro do escopo do enum dec- vai fazendo. inicializadores negativas são permitidas. Veja Enumerações para obter detalhes sobre enum declarações.
Mikroelektronika - Software e Soluções de hardware
www.mecatronicadegaragem.blogspot.com
para Embedded World 153
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Constantes ponteiro
Um ponteiro ou apontado no objeto pode ser declarados com o modificador const. Qualquer coisa declarados como const não podem alterar seu valor. Também é ilegal a criação de um ponteiro que pode violar um cedível não do objeto constante.
Considere os seguintes exemplos:
int i; int * Pi; int * const cp = &I; int const ci = 7; int const * PCI;
/ / / / / / / / / /
i é um int pi é um ponteiro para int (não inicializado) cp é um ponteiro constante para int A CI é uma constante int PCI é um ponteiro para int constante
int const * const cpc = &ci; / / CCP é um ponteiro constante para um / / Int constante
As seguintes atribuições legais:
i = IC; * Cp = ci;
+ + PCI; pci = cpc;
/ / / / / / / / / / / /
Atribuir-const int para int Atribuir-const int objeto de pontas-de-por-um-const-ponteiro Incrementar um ponteiro-para-const Atribuir um const-ponteiro-para-a-const a um pointer-para-const
Os seguintes atribuições são ilegais:
ci = 0; ci -; * Pci = 3;
cp = &ci;
cpc + +; pi = PCI;
/ / / / / / / / / / / / / / / / / / / /
NO - não pode atribuir a um const int NO - não pode mudar um const int NO - não pode atribuir a um objeto apontou para pelo ponteiro para const. NO - não pode atribuir a um ponteiro const, ainda que o valor não sofrerá alterações. NO - const mudança cant-ponteiro NO - se essa atribuição era permitido, você seria capaz de atribuir a * pci (Um valor constante), atribuindo a * pi.
Regras similares são applayed ao voláteis modificador. Note-se que ambos os const e voláteis pode aparecer como modificadores para o mesmo identificador.
154
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Expressões constantes
Um expressões constantes podem ser avaliados durante a tradução, sim, que a execução e conformidade pode ser usado em qualquer lugar que pode ser uma constante.
Expressões constantes pode consistir apenas no seguinte:
- - - -
literais, constantes de enumeração, simples constantes (sem matrizes constantes ou estruturas), sizeof operadores.
Expressões constantes não podem conter nenhum dos seguintes operadores, a menos que o Os operadores estão contidos no operando de uma sizeof operador: atribuição, decremento, vírgula, chamada de função, de incremento.
Cada expressão constante pode ser avaliada como uma constante que está na faixa de repre- valores sentable para seu tipo.
expressão constante pode ser usado em qualquer uma constante é legal.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
155
www.mecatronicadegaragem.blogspot.com
156 - E E SOLUÇÕES PARA PARA O MUNDO
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
PALAVRAS-CHAVE
Palavras-chave são palavras reservadas para fins especiais e não deve ser usado como normal identificador de nomes. Além de palavras-chave C padrão, todos os SFR relevantes são definidos como variáveis globais e representam palavras reservadas que não pode ser redefinido (por exemplo: TMR0, PCL etc.) Sondar o Assistente de código para letras específicas (Ctrl + Espaço no Editor) ou consulte a pré- definidos e constantes globais.
Aqui está um alfabética lista de palavras-chave em C:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
asm auto quebrar caso char const continuar padrão fazer dupla mais enum extern flutuar para goto se int tempo Registre-se retorno curto assinado sizeof estáticas struct switch typedef União não assinado vazio voláteis enquanto
Além disso, o mikroC PRO para PIC inclui um número de identificadores predefinidos utilizados em bibliotecas. Você pode substituí-los por suas próprias definições, se você quer desenvolver sua próprias bibliotecas. Para obter mais informações, consulte mikroC PRO PIC para Bibliotecas.
Mikroelektronika - SOFTWARESOFTWAREHARDWAREHARDWARE SOLUTIONSEMBEDDEDEMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
IDENTIFICADORES
Identificadores são nomes arbitrários com um determinado comprimento de funções, variáveis simbólicas constantes, user-defined tipos de dados e rótulos. Todos estes elementos do programa será designado objetos toda a ajuda (não se confunda com o significado de objeto em programação orientada a objetos).
Os identificadores podem conter as letras de A a Z e A a Z, caractere"_", E dígitos 0-9. A única restrição é que o primeiro caractere deve ser uma letra ou um sublinhado.
Caso sensibilidade
A mikroC PRO para PIC identificadores não são sensíveis ao caso por padrão, de modo que Soma, suma, e soma representam um equivalente identificador. sensibilidade processo pode ser ativado ou sus- pendido na janela Configurações de saída. Mesmo entre maiúsculas e minúsculas é desligado Palavras-chave permanecem maiúsculas e minúsculas e devem ser escritas em minúsculas.
Singularidade e Âmbito
Embora os nomes de identificador são arbitrários (de acordo com as regras descritas), se o mesmo nome é usado por mais de um identificador dentro do mesmo escopo ea partilha do espaço de mesmo nome, então o erro surge. nomes duplicados são legais para nome diferente espaços, independentemente das regras de escopo. Para obter mais informações sobre o escopo, consulte Escopo e visibilidade.
Exemplos Identifier
Aqui estão alguns identificadores válidos:
temperature_V1 Pressão no_hit dat2string SUM3 _vtext
... e aqui estão alguns identificadores inválidos:
7temp % Maior int j23.07.04
/ / / / / / / /
NO NO NO NO
- - - -
não pode não pode não pode não pode
começar com um numeral conter caracteres especiais jogo palavra reservada conter caracteres especiais (ponto)
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
157
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Pontuadores
A mikroC PRO para PIC pontuadores (também conhecido como separadores) são:
- - - - - - - - -
[] - Suportes () - Parênteses {} - Suspensórios ,- Vírgula ;- Ponto e vírgula :- Cólon *- Asterisco =- sinal de igual #- sinal de libra
A maioria destes pontuadores também funcionam como operadores.
Suportes
Suportes [] subscritos indicam única matriz e multidimensional:
char ch, str [] = "mikro";
int mat [3] [4]; CH = str [3];
/ * 3 x 4 * matriz / / * Elemento 4 /
Parênteses
Parênteses () são usados para agrupar expressões, isolar expressões condicionais, e indicam as chamadas de função e os parâmetros de função:
d = c * (A + b);
if (d == z) + + x; func (); void func2 (int n);
/ * Substituir * precedência normal /
/ * * Essencial com instrução condicional / / * Chamada da função, não args * /
/ * Declaração de uma função com parâmetros * /
Parênteses são recomendado nas definições macro para evitar potenciais precedência problemas durante a expansão:
# Define CUBE (x) ((x) * (x) (x))
Para obter mais informações, consulte Operadores Precedência e associatividade e Expres- sões.
158
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Suspensórios
Suspensórios {} indicar o início e fim de um comando composto:
if (d == z) { + + X; func ();
}
Fechamento da chave serve como um terminador para o comando composto, então um ponto e vírgula não é exigida após }, Exceto em declarações estrutura. Às vezes, o ponto e vírgula pode ser ilegal, como no
if (declaração)
{... }; / * Ponto-evírgula ilegal! * / mais
{... };
Para obter mais informações, consulte a instruções compostas.
Vírgula
Vírgula (,) separa os elementos de uma lista de argumentos da função:
void (int n, float f pc, char) func;
Vírgula também é usado como um operador em expressões vírgula. Misturando dois usos da vírgula é legal, mas você deve usar parênteses para distingui-los. Note-se que (exp1, exp2) evalutates ambos, mas é igual para o segundo:
função (i, j); chamada * / função com dois argumentos * / func ((exp1, exp2), (exp3, EXP4, exp5)) / * também chamadas de funções com duas args! * /
Ponto e vírgula
Vírgula (;) é um terminador de instrução. Qualquer expressão C legal (incluindo o vazio expressão), seguido por um ponto e vírgula é interpretado como uma declaração, conhecida como expressão comunicado. A expressão é avaliada e seu valor é descartado. Se o declaração de expressão não tem efeitos secundários, a mikroC PRO para PIC pode ignorá-la.
a + b; + + A; ;
/ * Avaliar a + b, mas descarta valor * / / * O efeito de lado em um, mas descarta valor de + + a * / / * Expressão vazia, ou um comando nulo * /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
159
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Semicolons às vezes são usados para criar uma declaração vazia:
for (i = 0; i <n, i + +);
Para obter mais informações, consulte Demonstrações.
Cólon
Use dois pontos (:) para indicar a instrução rotulada:
start: x = 0;
... goto início;
As etiquetas são discutidos nas declarações identificadas.
Asterisk (Declaração Ponteiro)
Asterisco (*) em uma declaração de variável indica a criação de um ponteiro para um tipo:
char_ptr char *;
/ * Um ponteiro para char é declarada * /
Ponteiros com vários níveis de engano pode ser declarada por indicação de um pertinente número de asteriscos:
int ** int_ptr; double_ptr *** duplo;
/ * Um ponteiro para um array de inteiros * / / * Um ponteiro para uma matriz de duplas * /
Você também pode usar o asterisco como um operador, quer dereference um ponteiro ou como mul- operador tiplication:
i * = int_ptr; a = b * 3,14;
Para obter mais informações, consulte os ponteiros.
Cadastre-se igual
160 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Igualdade de sinal (=) separa as declarações de variáveis da lista de inicialização:
int teste [5] = {1, 2, 3, 4, 5}; int x = 5;
sinal de igual é usado também como um operador de atribuição em expressões:
int a, b, c; a = b + c;
Para obter mais informações, consulte Operadores de Atribuição.
Cadastre Libra (Directiva Preprocessor)
Libra sinal (#) indica uma directiva de pré-processamento, quando ele ocorre como o primeiro não- caracteres em branco em uma linha. Significa uma ação compilador, não necessariamente asso- ciado com uma geração de código. Veja as directivas do pré-processador para obter mais infor- ção.
# e # # também são utilizados como operadores para realizar a substituição de tokens e fundindo-dur ção do pré-processador de digitalização de fase. Veja os Operadores Preprocessor.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
161
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
CONCEITOS
Esta seção aborda alguns conceitos básicos da linguagem, essencial para a compreensão de como funcionam os programas de C. Em primeiro lugar, precisamos estabelecer os seguintes termos que serão utilizados em toda a ajuda:
- - - -
Objetos e lvalues Escopo e visibilidade Espaços de nome Duração
Objetos
Um objeto é uma região específica da memória que podem armazenar um valor fixo ou variável (ou conjunto de valores). Esse uso de um termo objeto é diferente de um mesmo termo, utilizado em linguagens orientadas a objeto, que é mais geral. Nosso definiton da palavra seria englobam funções, variáveis, constantes simbólicas, tipos de dados definidos pelo usuário, e etiquetas.
Cada valor tem um nome associado e tipo (também conhecido como um tipo de dados). A nome é usado para acessar o objeto e pode ser um identificador simples ou complexas expres- Sion que se refere exclusivamente o objeto.
Objetos e declarações
Declarações necessário estabelecer um mapeamento entre identificadores e objetos. Cada declaração associa um identificador com um tipo de dados.
Associando os identificadores de objetos requer que cada identificador de ter pelo menos dois attrib- nutos: classe de armazenamento e tipo (por vezes referido como o tipo de dados). A mikroC PRO para PIC compilador deduz destes atributos a partir de declarações implícitas ou explícitas no código-fonte. Normalmente, apenas o tipo é especificado explicitamente a classe de armazenamento e espe- ifier assume o auto valor automático.
De um modo geral, um identificador não possa ser legalmente utilizado em um programa antes de sua dec- ponto vai fazendo no código-fonte. excepções a esta regra legal (conhecido como ref progressistas erences) são os rótulos, as chamadas para funções não declarado, e struct ou tags união. A gama de objetos que podem ser declaradas inclui:
- Variáveis - Funções - Tipos - Matrizes de outros tipos - Estrutura, união e tags enumeração
www.mecatronicadegaragem.blogspot.com
162
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
- - - - -
membros da estrutura membros da União constantes Enumeração Declaração de rótulos Preprocessor macros
Referência da Linguagem
A natureza recursiva da sintaxe declarator permite declarators complexo. Você provavelmente vai querer usar typedefs para melhorar a legibilidade se construir objetos complexos.
Lvalues
Lvalue é um objeto locator: uma expressão que designa um objeto. Um exemplo de lvalue expressão é * P, onde P é qualquer expressão que avalia um ponteiro não nulo. A modificáveis lvalue é um identificador ou uma expressão que diz respeito a um objeto que pode ser acessados e mudou legalmente na memória. Um ponteiro const para uma constante, por exem- plo, não é um lvalue modificáveis. Um ponteiro para uma constante pode ser alterado (mas seu deref- valor referenciadas não podem).
Historicamente, eu defendia "Esquerda", o que significa que lvalue poderiam legalmente ficar sobre a esquerda (a recebimento final) de uma instrução de atribuição. Agora só lvalues modificável e jurídico- ly ficar à esquerda de um operador de atribuição. Por exemplo, se a e b são NonCon- identificadores inteiro constante com armazenamento de memória corretamente alocados, eles são ambos os mod- lvalues ifiable e atribuições, como a = 1 e b = a + b são legais.
Rvalues
A expressão a + b não é lvalue: a + b = a É ilegal porque a expressão à esquerda não está relacionado a um objeto. Tais expressões são às vezes chamados rval- ues (Abreviação de valores à direita).
Mikroelektronika - Soluções de software e hardware para o mundo emb
www.mecatronicadegaragem.blogspot.com
utido 163
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Escopo e visibilidade
Âmbito
O escopo de um identificador é uma parte do programa no qual o identificador pode ser usado para acessar o seu objeto. Existem diferentes categorias de escopo: bloco (ou local), fun- ção, protótipo da função, e arquivo. Estas categorias dependem de como e onde iden- tifiers são declaradas.
Bloco: O escopo de um identificador com o bloco (ou local) começa no âmbito declaração ciando e termina no final do bloco que contém a declaração (bloco de tais é conhecido como o bloco de inclusão). declarações dos parâmetros com uma definição de função ção também tem escopo de bloco, limitado ao âmbito de aplicação do corpo da função. Arquivo: Arquivo identificadores de escopo, também conhecido como globais, são declaradas fora de todas as blocos, o seu âmbito é, do ponto de declaração para o fim do arquivo de origem. Função: Os identificadores apenas de alcance função são rótulos de instrução. Label nomes podem ser usados com as declarações goto lugar na função em que o rótulo é declarada. Rótulos são declarados implicitamente por escrito LABEL_NAME: fol seguidos por um comunicado. Rótulo nomes devem ser exclusivos dentro de uma função. Função protótipo: identificadores declarados na lista de declarações de parâmetro em um protótipo de função (e não como parte de uma definição de função) têm uma função de pro ToType escopo. Este escopo termina no final do protótipo da função.
Visibilidade
A visibilidade de um identificador é uma região do código fonte do programa a partir do qual um identificador é associado objeto pode ser acessado legalmente.
Alcance e visibilidade geralmente coincidem, mas há circunstâncias em que um objeto se torna temporariamente ocultas pelo aparecimento de uma segunda via do identificador: o objeto ainda existe, mas o identificador original não pode ser usado para acessá-lo até o âmbito da segunda via do identificador termina.
Tecnicamente, a visibilidade não pode ultrapassar o âmbito de aplicação, mas pode ultrapassar um escopo de visibilidade. Veja o seguinte exemplo:
vazio f (int i) { int j; j = 3;
{ dupla j; j = 0,1;
/ Auto / por padrão / / Int i e j estão no escopo e visível
/ Block nested / / J é o nome local no bloco aninhado / / I e j dupla são visíveis; / / Int j = 3, em abrangência, mas oculto
www.mecatronicadegaragem.blogspot.com
}
164
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
j + = 1;
/ / Saída dupla j de alcance / / Int j visível e = 4
Referência da Linguagem
} / / I e j são ambos fora de alcance
Espaços de nome
espaço de nomes é um escopo dentro do qual um identificador deve ser único. A mikroC PRO para PIC utiliza quatro categorias distintas de identificadores:
1. goto nomes de rótulo - deve ser exclusivo dentro da função em que se encontram
declarou. 2. Estrutura, união e enumeração marcas - deve ser exclusivo dentro do bloco no
que eles são definidos. Tags declarada fora de qualquer função deve ser exclusivo. 3. Estrutura e nomes de membros da União - deve ser exclusivo dentro da estrutura ou
União, nos quais eles são definidos. Não há nenhuma restrição sobre o tipo ou deslocamento de membros com o nome do membro mesmo em diferentes estruturas.
4. Variáveis, typedefs, funções e membros de enumeração - deve ser único, com no âmbito em que eles são definidos. Externamente identificadores devem ser declaradas única entre as variáveis declaradas no exterior.
nomes duplicados são legais para espaços de nomes diferentes, independentemente das regras de escopo.
Por exemplo:
int azul = 73;
{ / / Abrir um bloco de
enum {cores preto, vermelho, verde, violeta, azul, branco c}; / Azul = 3 * enumerador agora esconde declaração externa de azul * / int
struct {cores int i, j;}; dupla vermelho = 2;
}
azul = 37;
/ / ILEGAL: cores duplicadas tag / / Ilegal: redefinição de vermelho / / Volta no âmbito int azul
Duração
Duração, estreitamente relacionado com uma classe de armazenamento, define um período em que o declarado iden- tifiers têm real, objetos físicos alocados na memória. Nós também distinguir entre com- tempo de bate-estacas e objetos em tempo de execução. Variáveis, por exemplo, ao contrário typedefs e tipos, têm real memória alocada em tempo de execução. Existem dois tipos de duração: estáticas e local.
Mikroelektro
www.mecatronicadegaragem.blogspot.com
nika - Soluções de software e hardware para o mundo embutido 165
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Static Duração
A memória é alocada para objetos com duração de estática, logo que a execução é sub- forma, esta alocação de armazenamento dura até que o programa termina. duração estática objetos reside normalmente em dados fixos segmentos alocados de acordo com a memória especificador em vigor. Todos os globals têm duração estática. Todas as funções, sempre que definidos, são objectos com duração estática. Outras variáveis podem ser dadas duração estáticos usando o explícito estáticas ou extern armazenamento especificadores de classe.
Na mikroC PRO para PIC, objetos duração estáticos são não inicializado para zero (ou nulo) na ausência de qualquer inicializador explícito.
Não misture com duração estática arquivo ou escopo global. Um objeto pode ter duração estática e âmbito local - veja o exemplo abaixo.
Local Duração
objetos duração locais também são conhecidos como automática objetos. Eles são criados no pilha (ou num registo), quando um bloco de inclusão ou de uma função é inserida. Eles são desalocado quando o programa sai que bloco ou função. Local objetos duração deve ser explicitamente inicializado, caso contrário, seu conteúdo é imprevisível. O especificador de classe de armazenamento auto pode ser usado na declaração de variáveis locais duração, mas geralmente é redundante, pois auto é padrão para as variáveis declaradas dentro de um bloco.
Um objeto com duração locais também têm um alcance local, porque não existe fora do seu bloco de inclusão. Por outro lado, um objeto de âmbito local pode tem estática dura- ção. Por exemplo:
vazio f () {
/ * Variável duração locais; init uma sobre cada chamada para f * / int a = 1; / * A variável de duração estática; b init apenas em primeira convocação para f * / static int b = 1; / * Checkpoint! * / a + +; b + +;
}
vazio main () { / * No posto, vamos f (); / / A = 1, b = 1, após f (); / / a / b = 1 = 2, após f (); / / a / b = 1 = 3, após
/ / Etc }
ter: * / primeira chamada, segunda chamada, terceira chamada,
166
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
TIPOS
A mikroC PRO para PIC é uma linguagem estritamente digitado, o que significa que cada objeto, função, e expressão deve ter um tipo estritamente definido, conhecido no tempo de com- compilação. Note-se que o mikroC PRO para PIC funciona exclusivamente com tipos numéricos.
O tipo serve:
para determinar a alocação de memória correto exigido inicialmente. para interpretar o bit padrões encontrados no objeto durante o acesso posterior.
em muitas situações de verificação de tipo, para garantir que as atribuições ilegais são presos.
A mikroC PRO para PIC suporta o padrão muitos (pré) e definidas pelo usuário tipos de dados, inclusive assinado e sem assinatura inteiros de vários tamanhos, de ponto flutuante números com precisão várias matrizes, estruturas e uniões. Além disso, o ponto dores para a maioria destes objetos podem ser criados e manipulados na memória.
O tipo determina a quantidade de memória é alocado para um objeto e como a pró- grama irá interpretar os padrões de bits encontrada na alocação do objeto de armazenamento. Um dado tipo de dados pode ser visto como um conjunto de valores (muitas vezes dependente da implementação), que identificadores do mesmo tipo podem assumir, juntamente com um conjunto de operações permitidas com esses valores. O operador em tempo de compilação sizeof permite determinar o tamanho em bytes de qualquer padrão ou tipo definido pelo usuário.
A mikroC PRO para PIC bibliotecas-padrão e seu próprio programa e os arquivos devem fornecer identificadores inequívoca (ou expressões derivadas deles) e os tipos de modo que a mikroC PRO para PIC pode sempre acessar, interpretar, e (possivelmente) mudar o padrão de bits nhece na memória correspondente a cada objeto ativo em seu programa.
Tipo Categorias
Um comum maneira de categorizar os tipos é dividi-los em:
- Fundamental - Derivada
Os tipos fudamental representam tipos que não podem ser divididas em partes menores. Eles são por vezes referido como não estruturados tipos. Os tipos fundamentais são void, char, int, float, e casal, juntamente com curtas, longas, assinado e não assinado vari- formigas de alguns deles. Para obter mais informações sobre os tipos fundamentais, consulte o tópico Fun- Tipos fundamentais. Os tipos derivados também são conhecidos como estruturado tipos e incluem ponteiros para
www.mecatronicadegaragem.blogspot.com
outros tipos, arrays de outros tipos, tipos de funções, estruturas e sindicatos. Para obter mais informações sobre os tipos de derivados, consulte o tópico tipos derivados.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
167
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Tipos Fundamentais
Os tipos fudamental representam tipos que não podem ser divididos em elementos mais básicos, mentos, e são o modelo de representação de dados elementares sobre o nível da máquina. A tipos fudamental são muitas vezes referidos como tipos não-estruturados, e são utilizados como na criação de elementos mais complexos tipos derivados ou definida pelo usuário.
Os tipos fundamentais incluem:
-Aritmética Tipos - Enumerações - Tipo Void
Aritmética Tipos
Os especificadores de tipo aritméticos são construídos a partir de palavras-chave: void, char, int, float e casal, juntamente com os prefixos curtas, longas, assinado e não assinado. A partir dessas palavras-chave pode criar dois tipos integral e de ponto flutuante.
Tipos Integral
Os tipos char e int, juntamente com suas variantes, são considerados como parte integrante tipos de dados. As variantes são criados usando um dos modificadores de prefixo curtos, longos, assinado e não assinado.
Na tabela abaixo é uma visão geral dos tipos integrais - Palavras-chave entre parênteses pode ser (e são muitas vezes) omitido.
Os modificadores assinado e não assinado pode ser aplicado tanto char e int. Na ausência do prefixo unsigned, assinada é automaticamente assumida por tipos integrais. A única exceção é char, que é não assinado por padrão. As palavras-chave assinado e sem assinatura, quando usado por si só, significa assinado int e unsigned int, , respectivamente.
Os modificadores curto e tempo só pode ser aplicada a int. As palavras-chave curto e de comprimento, utilizada por conta própria, quer dizer short int e int tempo, respectivamente.
168
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Tipo Tamanho em B t
Faixa (Não assinado) char 1 0 .. 255
assinado char 1 - 128 .. 127
(Assinado) (int) short 1 - 128 .. 127
unsigned short (int) 1 0 .. 255
(Assinado) int 2 -32768 .. 32767
unsigned (int) 2 0 .. 65535
(Assinado) (int) de i
4 -2147483648 .. 2147483647
unsigned long (int) 4 0 .. 4294967295
Tipo Tamanho em Bytes Faixa
flutuar 4 -1,5 * 1045 .. +3.4 * 1038
dupla 4 -1,5 * 1045 .. +3.4 * 1038
long double 4 -1,5 * 1045 .. +3.4 * 1038
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Tipos de ponto flutuante
Os tipos flutuar e casal, juntamente com o long double variante, são consi- siderada tipos de ponto flutuante. A mikroC PRO PIC para a implementação de um Padrão ANSI considera que todas são do mesmo tipo.
ponto flutuante na mikroC PRO para PIC é implementado usando o AN575 Microchip 32-bit do formato (IEEE 754 complacente).
Uma visão geral do ponto flutuante tipos é mostrada na tabela abaixo:
Mikroelektronika - Soluções de software e hardware para o mundo embutido
169
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Enumerações
Uma enumeração tipo de dados é usado para representar um discreto, abstrata conjunto de val- ues com as devidas nomes simbólicos.
Enumeração Declaração
Enumeração é declarado assim:
enum tag {lista de enumeração-};
Aqui, tag é um nome opcional da enumeração; enumeração de-lista é uma vírgula delimitado lista de valores discretos, os entrevistadores (ou enumeração constantes). Cada enu- merator é atribuído um valor fixo integral. Na ausência de explícita inicializadores, o enumerador primeiro é definido como zero, eo valor de cada enumerador sucesso é definido ao valor de seu antecessor, acrescido de um.
Variáveis da enum tipo são declaradas as mesmas variáveis de qualquer outro tipo. Para exemplo, a seguinte declaração:
enum {cores preto, vermelho, verde, violeta, azul, branco c};
estabelece um único tipo integral, enum cores, variável c deste tipo, e um conjunto de enumeradores com valores inteiros constantes (preto = 0, vermelho = 1, ...). Na mikroC PRO para a PIC, uma variável de um tipo enumerado pode ser atribuído qualquer valor do tipo int - além da não verificação de tipo que é imposta. Isto é:
c = vermelho; c = 1;
/ / OK / / Ainda bem, significa o mesmo
Com explícita inicializadores integral, você pode definir um ou mais entrevistadores, específicas valores. O inicializador pode ser qualquer expressão que produz um número inteiro positivo ou negativo valor (após promoções inteiro possível). Quaisquer nomes subseqüentes sem inicializadores vai ser aumentada por um. Estes valores são geralmente únicas, mas as duplicatas são legais.
A ordem de constantes podem ser explicitamente re-arranjadas. Por exemplo:
enum {cores preto,
vermelho, verde, azul = 6, violeta, branco = 4};
/ / / / / / / / / / / /
valor valor valor valor valor valor
0 1 2 6 7 4
170
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
expressão inicializador pode incluir entrevistadores previamente declarado. Por exemplo, em a seguinte declaração:
enum memory_sizes bit = {1, nibble = 4 bits *, byte = 2 * mordidela,
kilobyte = 1024 bytes *};
nibble adquiriria o valor 4, o valor de 8 bytes e kilobytes o valor 8192.
Anomous Tipo Enum
Em nossa declaração anterior, o identificador cores é uma tag opcional que a enumeração pode ser usado em declarações posteriores de variáveis enumeração dos enum col- ors Tipo:
enum cores bg, fronteiras;
/ * Declarar variáveis e bg * fronteira
Como com struct e declarações união, você pode omitir a marca se não houver outras variáveis do presente enum tipo são necessários:
/ * Tipo enum Anónimo: * / enum {preto, vermelho, verde, violeta, azul, branco cor};
Enumeração Âmbito
tags Enumeração compartilhar o espaço de mesmo nome de marcas de estrutura e união. Enu- merators compartilhar o mesmo espaço de nomes como identificadores de variáveis comuns:
int azul = 73;
{/ / abrir um bloco de
enum {cores preto, vermelho, verde, violeta, azul, branco c}; / Azul = 3 * enumerador agora esconde declaração externa de azul * / int
struct {cores int i, j;}; dupla vermelho = 2;
}
azul = 37;
/ / ILEGAL: cores duplicadas tag / / ILEGAL: redefinição de vermelho / / Volta no âmbito int azul
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
171
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Tipo Void
vazio é um tipo especial indicando o ausência de qualquer valor. Não há objetos de vazio, ao contrário, vazio é utilizada para obter os tipos mais complexos.
Void Funções
Use o vazio palavra-chave como um tipo de retorno da função se a função não retorna um valor.
vazio print_temp (char temp) {
Lcd_Out_Cp ("Temperatura:"); Lcd_Out_Cp (temp); Lcd_Chr_Cp (223); / personagem / graus Lcd_Chr_Cp ('C');
}
Use vazio como uma função de posição se a função não tem parâmetros. Alter- nativamente, você pode escrever apenas parênteses vazios:
main (void) {/ / mesmo que main () ...
}
Genéricos Ponteiros
Ponteiros podem ser declarados como vazio, o que significa que eles podem apontar para qualquer tipo. Esses ponteiros são chamados genéricas.
172
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Tipos derivados
Os tipos derivados também são conhecidos como tipos estruturados. Eles são usados como elementos na criação de mais complexos tipos definidos pelo usuário.
Os tipos derivados incluem:
- - - -
matrizes ponteiros estruturas sindicatos
Matrizes
Matriz é a mais simples e mais comumente usado tipo estruturado. Uma variável de matriz tipo na verdade é um array de objetos do mesmo tipo. Estes objectos representam ele- mentos de uma matriz e são identificados por sua posição na matriz. Uma matriz consiste em uma região contígua de armazenamento exatamente grande o suficiente para armazenar todos os seus elementos.
Declaração Array
declaração de matriz é semelhante à declaração de variável, com os suportes adicionado após identificador:
Array_Name tipo de expressão [constante]
Isso declara uma matriz denominada Array_Name e composto de elementos de tipo. A tipo pode ser qualquer tipo escalar (excepto void), enumeração tipo definido pelo usuário, o ponteiro, ou outra matriz. Resultado da expressão constante dentro dos colchetes determina um número de elementos na matriz. Se uma expressão é dada em um declarator matriz, ele deve avaliar a um constante inteira positiva. O valor é um número de elementos em uma matriz.
Cada um dos elementos de um array é indexado de 0 ao número de elementos menos um. Se um número de elementos é n, os elementos de matriz podem ser abordadas como variáveis Array_Name [0] .. [N-1] Array_Name de tipo.
Aqui estão alguns exemplos de declaração de matriz:
# Define MAX = 50 int flutuar flutuar
vector_one [10] / * declara um array de 10 inteiros * / vector_two [MAX]; / * declara uma matriz de 50 carros alegóricos * / vector_three [MAX - 20] / * declara uma matriz de 30 carros alegóricos * /
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido 173
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Inicialização de matriz
Uma matriz pode ser inicializada na declaração, atribuindo-lhe um delimitado por vírgula seqüência de valores dentro de chaves. Ao inicializar uma matriz na declaração, poderá omitir o número de elementos - será determinada automaticamente de acordo com a número de elementos atribuídos. Por exemplo:
/ * Declare uma matriz que contém o número de dias de cada mês: * / int dia [12] = {} 31,28,31,30,31,30,31,31,30,31,30,31;
/ * Esta declaração é idêntico ao anterior * / int dias [] = {} 31,28,31,30,31,30,31,31,30,31,30,31;
Se você especificar os valores de comprimento e de partida, o número de valores de partida deve não pode exceder o comprimento especificado. A oposto é possível, neste caso, o arrasto "Excesso" elementos serão atribuídos a alguns valores de tempo de execução encontradas a partir de mem- teoria.
No caso da matriz de char, você pode usar um menor seqüência literal notação. Por exemplo:
/ * As duas declarações são idênticas: * / const char msg1 [] = {'T', 'E', 's', 't', '\ 0'}; const char msg2 [] = "Teste";
Para obter mais informações sobre os literais cadeia de caracteres, consulte a String Constantes.
n Expressões Matrizes
Quando o nome de uma matriz aparece na avaliação da expressão (excepto com a ópera- res & e sizeof), é convertido implicitamente para o ponteiro que aponta para a primeira matriz elemento. Veja matrizes e ponteiros para mais informações.
Arrays multi-dimensionais
Uma matriz é unidimensional, se for do tipo escalar. arrays unidimensionais são algumas- vezes referido como vetores.
Matrizes multidimensionais são construídos por declarar arrays de tipo de matriz. Estes matrizes são armazenadas na memória de tal maneira que as mudanças mais à direita subscrito mais rápido, ou seja, as matrizes são armazenadas "Em linhas". Aqui está um exemplo de matriz de 2 dimensões:
flutuar m [50] [20];
/ * Array de 2 dimensões de tamanho 50x20 * /
A variável m é uma matriz de 50 elementos, que por sua vez, são matrizes de 20 carros alegóricos cada. Assim, temos uma matriz de 50x20 elementos: o primeiro elemento é m [0] [0], a última
174
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
é m [49] [19]. O primeiro elemento da linha 5 seria m [4] [0].
Se você não inicializar a matriz na declaração, você pode omitir a primeira dimensão da array multi-dimensional. Nesse caso, a matriz está localizado em outro lugar, por exemplo, em outro arquivo. Esta é uma técnica comumente usada quando passar matrizes como parâmetros de função:
int a [3] [2] [4];
/ * Matriz 3-dimensional de tamanho 3x2x4 * /
vazio func (int [n] [2] [4]) {/ * podemos omitir primeira dimensão * /
... n [2] [1] [3] + +; incremento * / * o último elemento /
}
vazio main () {
... func (a);
}
Você pode inicializar um array multi-dimensional com um conjunto adequado de valores dentro suspensórios. Por exemplo:
int a [3] [2] = {{1,2}, {2,6}, {3,7}};
Ponteiros
Ponteiros são objetos especiais para a realização (ou "Apontando para") endereços de memória. Na mikroC PRO para PIC, endereço de um objeto na memória podem ser obtidas por meio de um operador unário &. Para alcançar o objeto pontiagudo, usamos um operador de indireção (*) em um ponteiro.
Um ponteiro do tipo "Ponteiro para objeto do tipo" guarda o endereço da (ou seja, aponta para) um objeto do tipo. Como os ponteiros são objetos, você pode ter um ponteiro apontando para um ponteiro (e assim por diante). Outros objetos comumente apontado incluem matrizes, estruturas e sindicatos.
Um ponteiro para uma função é melhor pensar como um endereço, normalmente em um segmento de código, onde o código executável que a função é armazenado, isto é, o endereço para o qual o controle é transferido quando essa função é chamado.
Embora ponteiros contêm números com a maioria das características de inte-assinado gers, eles têm suas próprias regras e restrições para as declarações, as atribuições, con- versões, e aritmética. Os exemplos nas seções seguintes ilustram algumas dessas regras e as restrições.
Mikroelektronika -
www.mecatronicadegaragem.blogspot.com
Soluções de software e hardware para o mundo embutido 175
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Ponteiro declarações
Os ponteiros são declarados da mesma forma que qualquer outra variável, mas com * à frente do identificador. Um tipo no início da declaração especifica o tipo de um objeto pontiagudo. Um ponto- er deve ser declarado como apontando para algum tipo particular, ainda que este tipo é vazio, o que realmente significa um ponteiro para qualquer coisa. Ponteiros para vazio são muitas vezes chamados genéricos ponteiros, e são tratados como ponteiros para char na mikroC PRO para a PIC.
Se tipo é qualquer tipo pré-definido ou definido pelo usuário, incluindo vazio, a declaração
Tipo * p;
/ * Ponteiro Uninitialized * /
declara p ser do tipo "Ponteiro para tipo ". Todos escopo, duração e regras de visibilidade são aplicada ao p objeto apenas declarada. Você pode ver a declaração da seguinte maneira: se * P é um objeto de tipo, em seguida, p tem que ser um ponteiro para tal objeto (objeto de tipo).
Nota: Você deve inicializar ponteiros antes de usá-los! Nosso ponto declarado anteriormente, er * P não é inicializado (isto é atribuído um valor), por isso não pode ser usado ainda.
Nota: No caso de declarações ponteiro múltiplos, cada um requer um identificador indireta operador. Por exemplo:
int * Pa, pb, * pc *;
/ * É o mesmo que: * /
int * Pa; int * Pb; int * PC;
Uma vez declarada, porém, um ponteiro pode normalmente ser transferido assim que ele aponta para um objeto de outro tipo. O mikroC PRO para PIC permite transferir sem ponteiros typecasting, mas o compilador irá avisá-lo a menos que o ponteiro foi originalmente declarado estar apontando para nulas. Você pode atribuir a void * ponteiro para o não-void * ponteiro - referem-se a vazio para mais detalhes.
176
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Ponteiros nulos
A ponteiro nulo valor é um endereço que é garantia de ser diferente de qualquer outro válido ponteiro em uso em um programa. Atribuindo a constante inteira de 0 a um ponteiro atribui um valor do ponteiro nulo para ele.
Por exemplo:
int * Pn = 0;
/ * Aqui está um ponteiro nulo * /
/ * Nós podemos testar o ponteiro como isto: * / se (Pn == 0) {... }
O tipo de ponteiro "Ponteiro para void" não deve ser confundido com o ponteiro nulo. A declaração
vazio * Vice-presidente;
declara que vp é um ponteiro genérico, capaz de ser designado por qualquer das "Ponteiro para tipo " valor, inclusive nulo, sem reclamar.
Atribuições sem casting adequado entre um "Ponteiro para type1 " e um "Ponteiro para type2 ", onde type1 e type2 diferentes tipos, pode invocar um aviso do compilador ou erro. Se type1 é uma função e type2 não é (ou vice-versa), atribuições ponteiro são ilegais. Se type1 é um ponteiro para vazio, nenhuma conversão é necessária. Se type2 é um ponteiro para vazio, nenhuma conversão é necessária.
Função Ponteiros
Função ponteiros são ponteiros, variáveis, ou seja, que apontam para o endereço de um fun- ção.
/ / Definir um ponteiro de função
int (* Pt2Function) (char, float, char);
Nota: Assim funções e ponteiros de função com a convenção de chamada diferentes (argu- mento da ordem, tipo de argumentos ou tipo de retorno é diferente) são incompatíveis com cada outras.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
177
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Atribuir um endereço para um ponteiro de função
É muito fácil atribuir o endereço de uma função para um ponteiro de função. Basta ter o nome de uma função adequada e conhecidos. Usando o operador de endereço e de frente o nome da função é opcional.
/ / Atribuir um endereço para o ponteiro de função
int DoIt (float a, b, char, char c) {return a + b + c;} pt2Function = &DoIt; / cessão /
Exemplo:
int ADDC (char x, char y) {
retorno x + y; }
int SUBC (char x, char y) {
retorno x, y;
} int mulC (char x, char y) {
retorno x * y; } int CIVD (char x, char y) {
retorno x / y;
}
int modC (char x, char y) {
retorno x, y%;
}
/ / Array de ponteiro para funções que recebem dois caracteres e retorna int int (* Arrpf []) (char, char) = { ADDC, SUBC, mulC, CIVD, modC};
int res; char i; vazio main () {
para (I = 0; i <5; i + +) {
res = arrpf [i] (10,20); }
}
178
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
Aritmética de ponteiro
Aritmética de ponteiro no mikroC PRO para PIC é limitado a:
Referência da Linguagem
- - - - -
atribuição de um ponteiro para outro, comparando dois ponteiros, comparando ponteiro a zero, adição / subtração ponteiro e um valor inteiro, subtraindo dois ponteiros.
A aritmética interna realizada em ponteiros depende do especificador de memória força ea presença de modificadores ponteiro imperiosa. Ao realizar-arith aritmética com ponteiros, presume-se que o ponteiro aponta para um array de objetos.
Matrizes e ponteiros
Matrizes e ponteiros não são tipos completamente independente na mikroC PRO para PIC. Quando o nome de uma matriz aparece na avaliação da expressão (exceto com operadores & e sizeof), é convertido implicitamente para o ponteiro apontando para matriz primeiro elemento. Devido a este fato, as matrizes não são lvalues modificáveis.
Suportes [ ] indicam índices da matriz. A expressão
id [exp]
é definido como
* ((Id) + (exp))
quando: - id é um ponteiro e exp é um número inteiro, ou - id é um inteiro e exp é um ponteiro.
As seguintes declarações são verdadeiras:
& A [i] a [i]
= =
a + i * (A + i)
De acordo com essas orientações, pode ser escrito:
pa = & a [4]; x * = (aa + 3); / * .. mas: * / y = aa * + 3;
/ / Pa aponta para um [4] / / X = a [7]
/ / Y = a [4] + 3
Mikroelektronika - Soluções de software e hardware para o mundo embutido
179
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem
Além disso, o cuidado deve ser tomado quando usando a precedência do operador:
mikroC PRO para PIC
* Pa + +; (* Aa) + +;
/ / * Igual a (aa + +), incrementa o ponteiro / / Incrementa o objeto apontado!
Os exemplos a seguir também são válidas, mas melhor evitar essa sintaxe, pois ele pode fazer o código realmente ilegível:
(A + 1) [i] = 3; / / Mesmo que: * ((a + 1) + i) = 3, ou seja, a [i + 1] = 3
(I + 2) [a] = 0; / / Mesmo que: * ((i + 2) + a) = 0, ou seja, a [i + 2] = 0
Atribuição e comparação
A atribuição simples operador (=) pode ser usado para atribuir o valor de um ponteiro para outro, se eles são do mesmo tipo. Se eles forem de tipos diferentes, você deve usar um typecast operador. A conversão explícita de tipo não é necessário se um dos ponteiros é genérico (da vazio tipo).
Atribuindo a constante inteira de 0 a um ponteiro atribui um valor nulo ponteiro para ele.
Dois ponteiros apontando para a mesma matriz pode ser comparada usando oper-relacional ators ==,! =, <, <=,>, e > =. Os resultados destas operações são as mesmas que se eles foram usados em valores subscritos de elementos da matriz em questão:
int * Pa = & a [4], pb * = & a [2];
se (Pa == pb) {... / * Não será executado em 4 não é igual a 2 * /} se (Pb pa>) {... / * Irá ser executado como 4 é superior a 2 * /}
Você também pode comparar os ponteiros para o valor zero- testes, dessa forma, se o ponteiro do actu- pontos aliado a alguma coisa. Todos os ponteiros podem ser testados com sucesso para a igualdade ou a desigual- dade de nulos:
se (Pa == 0) {... } se (Pb! = 0) {... }
Nota: Comparando os ponteiros apontando para diferentes objetos / matrizes podem ser realizados em responsabilidade do programador- uma visão precisa do armazenamento de dados de física é necessário.
180
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Ponteiro Adição
Você pode usar operadores + + +, e + = adicionar um valor inteiro a um ponteiro. A resultado de Além disso é definida somente se o ponteiro aponta para um elemento de uma matriz e Se o resultado for um ponteiro apontando para a mesma matriz (ou um elemento para além dela).
Se for declarado um ponteiro para apontar para tipo, acrescentando um valor integral n para o ponteiro incrementos o valor do ponteiro n * sizeof (tipo) enquanto o ponteiro permanece dentro do intervalo legal (primeiro elemento para um além do último elemento). Se tipo tem uma tamanho de 10 bytes, então a adição de 5 para um ponteiro para tipo avança o ponteiro de 50 bytes na memória. Em caso da tipo tipo, o tamanho de um passo é um byte.
Por exemplo:
int a [10]; int * Pa = & a [0]; * (Pa + 3) = 6; agora é igual a 6 * / aa + +;
/ * Um array contendo 10 elementos do tipo int * / / Pa * é ponteiro para int, apontando para a [0] * / / * 3 pa é um ponteiro que aponta para a [3], de modo a [3]
/ Pa * aponta agora para o próximo elemento de uma matriz:
a [1] * /
Não há nenhum elemento, como ponteiro "um após o último elemento", é claro, mas o está autorizado a assumir tal valor. C "Garantias" que o resultado disso é definida mesmo quando aponta para uma matriz de elemento passado. Se os pontos P para o último elemento de matriz, P 1 + é legal, mas P 2 + é indefinido.
Isto permite-lhe gravar loops que o acesso a elementos em um array seqüência meios de incrementar ponteiro - na última iteração, você terá o ponteiro do ponto de ção de um elemento passado a matriz, que é legal. No entanto, a aplicação de um engano operador (*) para uma "Ponteiro para um após o último elemento" leva a um comportamento indefinido.
Por exemplo:
vazio f (some_type um [] int n) {
/ * Função f manipula elementos de uma matriz; * / / * Matriz A tem n elementos do tipo some_type * /
int i; some_type * p = & a [0];
para (I = 0; i <n, i + +) {
/ * .. aqui nós fazemos algo com p * .. * / p + +; / * .. e com a última iteração p excede
o último elemento de um array * / } / * Neste ponto, p * é indefinido! * /
}
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
181
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Ponteiro Subtração
Semelhante ao lado, você pode usar os operadores -, - E -= para subtrair uma parte integrante valor de um ponteiro.
Além disso, você pode subtrair dois ponteiros. A diferença será igual à distância entre dois endereços apontou, em bytes.
Por exemplo:
int int int
a [10]; * PI1 = & a [0]; * Pi2 = & a [4];
i = pi2
pi2 - PI1; -= (I> 1);
/ * I é igual a 8 * / / * Pi2 = pi2 - 4: pi2 agora aponta para [0] * /
182
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Estruturas
Uma estrutura é um derivado tipo normalmente representa uma coleção definida pelo usuário de nome membros (ou componentes). Esses membros podem ser de qualquer tipo, seja fundamental ou derivados (com algumas restrições que devem ser discutidos mais tarde), em qualquer seqüência. Em adi- ção, um membro de estrutura pode ser um campo de bits.
Diferentemente dos arrays, estruturas são consideradas objetos únicos. A mikroC PRO para PIC tipo de estrutura permite-lhe lidar com estruturas de dados complexas quase tão facilmente como pecado gle variáveis.
Nota: o mikroC PRO para PIC não suporta anônimos estruturas (ANSI-mergulhador gência).
Estrutura da declaração e inicialização
Estruturas são declaradas usando a palavra-chave struct:
struct tag {Membro declarator lista};
Aqui, tag é o nome de uma estrutura; declarator membro-lista é uma lista de estrutura membros, na verdade, uma lista de declarações de variáveis. Variáveis do tipo estruturado são declarou o mesmo que as variáveis de qualquer outro tipo.
O tipo de membro não pode ser o mesmo que o tipo struct sendo atualmente declarou. No entanto, um membro pode ser um ponteiro para a estrutura que está sendo declarada, como no se- mugido exemplo:
struct {S MYSTRUCT;} MYSTRUCT;
/ * Ilegal! * /
struct MYSTRUCT {MYSTRUCT ps *;}; / * OK * /
Além disso, uma estrutura pode conter anteriormente tipos de estrutura definidos quando se declara uma instância da estrutura declarada. Aqui está um exemplo:
/ * Estrutura que define um ponto: * / struct Dot {float x, y;};
/ * Estrutura que define um círculo * / struct Circle {
flutuar r; struct ponto central;
} O1, O2; / * Declarar variáveis O1 e O2 do Círculo * /
Mikroele
www.mecatronicadegaragem.blogspot.com
ktronika - Soluções de software e hardware para o mundo embutido 183
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Note que a tag estrutura pode ser omitido, mas os objetos, em seguida adicionais deste tipo não pode ser declarados em outro lugar. Para obter mais informações, consulte Estruturas Untagged abaixo.
A estrutura é inicializada atribuindo a ele uma seqüência delimitada por vírgulas de valores dentro aparelho, semelhante à matriz. Por exemplo:
/ * Referindo-se às declarações do exemplo acima: * /
/ * Declarar e inicializar pontos P e Q: * / struct Dot p = {1, 1..}, Q = {3,7, -0,5};
/ * Declarar e inicializar círculo o1: * / struct Circulo o1 = {{1, 0, 0}...} / / Raio é de 1, o centro está em (0, 0)
Declarações incompletas
declarações incompletas são também conhecidas como as declarações para a frente. Um ponteiro para um tipo de estrutura A pode legalmente incluídos na declaração de outra estrutura B antes A foi declarado:
struct A; / / incompletos struct B {struct Um ano *;}; struct A {struct B pb *;};
A primeira aparição de A chama-se incompleta, porque não há definição para isso em esse ponto. Uma declaração incompleta, é permitido aqui, porque a definição de B não precisa do tamanho da A.
Estruturas Untagged e TYPEDEFs
Se a marca de estrutura é omitido, um estrutura untagged é criado. O untagged estruturas podem ser usados para declarar os identificadores na delimitado por vírgula membro declarator-lista ser do tipo de estrutura dada (ou derivados), mas além- objetos al deste tipo não pode ser declarado em outro lugar. É possível criar um typedef ao declarar uma estrutura, com ou sem a tag:
/ * Com tag: * / typedef struct MYSTRUCT {... MyStruct}; MyStruct s, * ps, ARRS [10] / * mesma estrutura MYSTRUCT s, etc * /
/ * Sem tag: * / typedef struct {... MyStruct}; MyStruct s, ps *, ARRS [10];
Normalmente, não há necessidade de usar os dois tag e typedef: ou pode ser usado em es- tipo de declarações ture.
184
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
membros Untagged estrutura e união são ignorados durante a inicialização.
Nota: Veja também a trabalhar com as estruturas.
Trabalhar com estruturas
Estruturas representam tipos definidos pelo usuário. Um conjunto de regras relativas à aplicação de estruturas é estritamente definido.
Atribuição
As variáveis do mesmo tipo estruturado pode ser atribuído um para outro por meio de operador de atribuição simples (=). Isso irá copiar todo o conteúdo da variável a destino, independentemente do interior complexidade de uma determinada estrutura. Note-se que duas variáveis são do mesmo tipo estruturado somente se ambos são definidos pela instrução ou mesmo usando o mesmo tipo identificador. Por exemplo:
/ * A e b são do mesmo tipo: * / struct {Int M1, M2;} a, b;
/ * Mas, c, d _não_ são do mesmo tipo, embora
descrições de sua estrutura são idênticas: * / struct {Int M1, M2;} c; struct {Int M1, M2;} d;
Tamanho da Estrutura
O tamanho da estrutura de memória pode ser recuperada por meio do operador sizeof. É não é necessário que o tamanho da estrutura é igual à soma das suas membros tamanhos. Muitas vezes, é maior devido a certas limitações de armazenamento de memória.
Estruturas e Funções
A função pode retornar um tipo de estrutura ou um ponteiro para um tipo de estrutura:
MYSTRUCT func1 (void); MYSTRUCT * func2 (void);
/ * Func1 () retorna uma estrutura * / / * Func2 () retorna ponteiro para estrutura * /
Uma estrutura pode ser passada como um argumento para uma função no das seguintes maneiras:
vazio func1 (MYSTRUCT s;); vazio func2 (MYSTRUCT SPTR *;);
/ * Diretamente * / / * Através de um ponteiro * /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
185
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Estrutura de Acesso ao Portal
Estrutura e membros do sindicato são acessadas usando o oper seguinte seleção de dois ators:
- . (Ponto final) - -> (Seta à direita)
O operador . é chamado o selector membro direto e é usado para acessar diretamente um dos membros da estrutura. Suponha que o objeto s é do tipo struct S e m é um identificador de membro do tipo M declarados em s, então a expressão
s.m
/ / Acesso direto a um dos membros m
é do tipo M, e representa o objeto membro m em S.
O operador -> é chamado o selector membro indireto (ou ponteiro). Suponha que o objeto s é do tipo struct S e ps é um ponteiro para s. Então, se m é um membro iden- tifier do tipo M declarados em s, a expressão
ps-m>
/ / Acesso indirecto aos membros m; / / Idêntico a (* ps) m.
é do tipo M, e representa o objeto membro m em s. A expressão ps-m> é uma abreviação conveniente para (* Ps). M
Por exemplo:
struct MYSTRUCT {
int i; char str [21]; dupla d;
S SPTR} *, = &S;
...
s.i = 3; SPTR -> d = 1,23;
/ / Atribuir ao membro do MYSTRUCT i s / / Atribui ao membro d de MYSTRUCT s
A expressão s.m é lvalue, desde que s é lvalue e m não é uma matriz do tipo. A expressão m SPTR-> é um lvalue menos m é um tipo de matriz.
186
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Acessando estruturas aninhadas
Se a estrutura B contém um campo cujo tipo é a estrutura A, os membros do A pode ser acessado por duas aplicações do seletores membro:
struct A {
int j; dupla x; }; struct {B
int i; struct Um aa; dupla d; SPTR} * s,;
...
s.i = 3; s.aa.j = 2; SPTR-> d = 1,23; aa.x SPTR-> = 3,14;
/ / / / / / / /
atribuir atribuir atribuir atribuir
3 a 2 a 1.23 3.14
o membro i de B o membro j de A para o membro d de B ax membro de uma
Estrutura Singularidade
Cada declaração de estrutura apresenta um tipo de estrutura única, de modo que em
struct A {
int i, j; dupla d; } AA, AAA;
struct {B
int i, j; dupla d; Bb};
os objetos aa e aaa ambos são do tipo struct A, mas os objetos aa e bb são tipos de estrutura diferente. As estruturas podem ser atribuídas apenas se a origem eo destino- nação tem o mesmo Tipo:
aa = AAA; AA BB =;
/ * OK: mesmo tipo, membro por membro de atribuição * / / * ILEGAL: * diferentes tipos /
/ * Mas aa.i = aa.j = aa.d =
você pode atribuir membro por um membro: * / bb.i; bb.j; bb.d;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
187
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Sindicatos
União tipos são tipos derivados partilha muitas das características sintáticas e funcional de tipos de estrutura. A diferença fundamental é que uma sindicalistas partilham a mesma mem- espaço de memória disponível.
Nota: O mikroC PRO para PIC não suporta sindicatos anônimo (ANSI-diver gência).
Sindicatos Declaração
Os sindicatos têm a mesma declaração como estruturas, com a palavra-chave União usados em vez de struct
União tag {membro declarator lista};
Ao contrário das estruturas " membros, o valor de apenas um dos membros da União podem ser armazenados a qualquer momento. Aqui está um exemplo simples:
União myunion {
/ / Tag sindicato é 'myunion'
int i; dupla d; char ch;
Ontem} * mu,;
A identificador mu, do tipo myunion, pode ser usado para prender um 2-byte int, 4-byte dou- ble ou de byte único char, mas apenas um deles, em determinado momento. O identificador pm é um ponteiro para a união myunion.
Tamanho da União
O tamanho de uma união é o tamanho de seu membro maior. Em nosso exemplo anterior, os sizeof (myunion união) e sizeof (mu) bytes de retorno 4, mas duas não são utilizadas (Acolchoado), quando mu detém a int bytes do objeto, e 3 são utilizadas quando mu detém char.
União Acesso ao Portal
membros da União podem ser acessados com os seletores estrutura membro (e -.>), ser cuidado ao fazer isto:
/ * Referindo-se às declarações do exemplo acima: * / pm = μ mu.d = 4,016; tmp = mu.d / / OK: mu.d = 4,016
188
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
tmp = mu.i;
i am-> = 3; tmp = mu.i;
/ / Resultado peculiar / / OK: mu.i = 3
Referência da Linguagem
A terceira linha é legal, desde mu.i é um tipo integral. No entanto, o padrão de bits em mu.i corresponde a partes das anteriormente atribuídas casal. Como tal, ele provavelmente não vai fornecer uma interpretação inteiro úteis.
Quando devidamente convertido, um ponteiro para uma união pontos a cada um dos seus membros, e vice-versa.
Campos Bit
Campos de bits são especificados os números de bits que podem ou não ter um associado iden- tifier. Campos de bits oferecem uma maneira de subdividir em partes de estruturas chamado de definido pelo usuário tamanhos.
Estruturas e os sindicatos podem conter campos de bits que podem ser de até 16 bits.
Você não pode pegar o endereço de um campo de bits.
Nota: Se você precisar manipular bits específicos das variáveis de 8 bits (Char e não assinado curto) ou registros, você não precisa declarar campos de bits. solução muito mais elegante é a utilização do mikroC PRO para a capacidade intrínseca da PIC para o acesso de bits individuais - veja Acesso Individual Bits para mais informações.
Declaração de campos de bits
Campos de bits pode ser declarado apenas em estruturas e uniões. Declare uma estrutura normal ly e atribuir campos individuais como este campos (precisam ser não assinado):
struct tag {
não assinado declarator bitfield-lista; }
Aqui, tag é um nome opcional da estrutura; declarator bitfield-lista é uma lista de campos de bits. Cada componente requer um identificador de cólon e sua largura em bits para ser explicitamente especificado. largura total de todos os componentes não pode exceder dois bytes (16 bits).
Como um objeto, estrutura campos de bits necessários dois bytes. Campos individuais são embaladas em
www.mecatronicadegaragem.blogspot.com
dois bytes da direita para a esquerda. Em bitfield-declarator lista, você pode omitir identifi- er (s) para criar uma artificial "Estofo", ignorando, assim bits irrelevante.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
189
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Por exemplo, se há uma necessidade de manipular bits apenas 2-4 de registrar-se como um bloco, criar uma estrutura como esta:
struct {
não assinado : 2, / / Passar bits 0 e 1, nenhum identificador aqui mybits: 3; / / Relevantes bits 2, 3 e 4
/ / Bits 5, 6 e 7 são implicitamente deixados de fora Myreg};
Aqui está um exemplo:
typedef struct
lo_nibble: hi_nibble: high_byte:
{ 4; 4; 8;} myunsigned;
que declara o tipo estruturado myunsigned contendo três componentes: lo_nibble (Bits 3 .. 0), hi_nibble (Bits 7 .. 4) e high_byte (Bits 15 .. 8).
Acesso campos de bits
Campos de bits pode ser acessado da mesma forma como o membros da estrutura. Uso direto eo selector de membro indirectos (. e ->). Por exemplo, poderíamos trabalhar com os nossos pré- riormente declarada myunsigned como este:
/ / Este exemplo escreve byte baixo do campo de bit do tipo de myunsigned Port0: Value_For_PORT0 myunsigned;
vazio main () {
... Value_For_PORT0.lo_nibble = 7; Value_For_PORT0.hi_nibble = 0x0C; * P0 = (char *) (Void *) & Value_For_PORT0;
/ / Typecasting: / / 1. endereço da estrutura para ponteiro para void / / 2. ponteiro para void para ponteiro para char / / 3. dereferencing para obter o valor
}
190
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Idioma Referência
Conversões de Tipo
A mikroC PRO para PIC é uma linguagem estritamente digitadas, com cada operadora, a declaração e função exigente operandos devidamente digitado / argumentos. No entanto, nós muitas vezes têm de usar objetos de "Descasamento" tipos de expressões. Nesse caso, tipo conversão é necessário.
Conversão de objeto de um tipo que significa o tipo de objeto é alterado para outro tipo. A mikroC PRO para PIC define um conjunto de conversões para o padrão interno tipos, desde pelo compilador quando necessário. Para obter mais informações, consulte o Conversões Standard.
A conversão é necessária nas seguintes situações:
- Se uma instrução requer uma expressão do tipo especial (de acordo com def idioma rial), e usamos uma expressão de tipo diferente, - Se um operador requer um operando de tipo particular, e nós usamos um operando de dife- diferentes tipos, - Se uma função requer um parâmetro formal de determinado tipo, e passá-lo um objeto de tipo diferente, - Se uma expressão a seguir a palavra-chave retorno não coincide com o declarado fun- ção tipo de retorno, - Se intializing um objeto (na declaração) com um objeto de tipo diferente.
Nessas situações, o compilador irá fornecer uma conversão automática implícita de tipos, sem qualquer interferência do programador. Além disso, o programador pode exigir a conversão explicitamente meio do distribuir os papéis operador. Para obter mais informações, consulte a conversão de tipo explícito.
Standard Conversões
Ao usar a expressão aritmética, como a + b, onde um e b são de diferentes tipos de aritmética, o mikroC PRO para PIC realiza conversões de tipo implícito antes a expressão é avaliada. Essas conversões padrão incluem promoções "Inferiores" tipos de "Superior" tipos, no interesse da precisão e consistência.
Atribuir um objeto de caráter assinado (como uma variável) a um objeto resulta integral na extensão de sinal automático. Objetos do tipo signed char sempre usar a extensão de sinal; objetos do tipo unsigned char byte sempre tem seus altos definido para zero quando convertido para int.
Convertendo um tipo mais parte integrante de um tipo mais curto trunca os bits de ordem superior e folhas de bits de baixa ordem inalterada. Convertendo um tipo mais curto parte integrante de um mais tipo qualquer sinal estende-se ou zero preenche os bits extra de o novo valor, dependendo se o tipo mais curto é assinado ou não assinado, respectivamente.
Mikroele
www.mecatronicadegaragem.blogspot.com
ktronika - Soluções de software e hardware para o mundo embutido 191
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Idioma Referência mikroC PRO para PIC
Nota: Conversão de dados de ponto flutuante em valor integral (em tarefas ou através de typecast explícito) produz resultados corretos apenas se o flutuar valor não exceda o escopo de destino tipo integral.
Detalhes:
Aqui estão os passos que o mikroC PRO para PIC utiliza para converter os operandos em uma arith- expressão aritmética: Em primeiro lugar, qualquer tipo de pequeno integrais são convertidas de acordo com as seguintes regras:
1. 2. 3. 4. 5.
char converte em int signed char converte em int, com o mesmo valor curto converte em int, com o mesmo valor, sinal estendido unsigned short converte em int, com o mesmo valor, zero-preenchida enum converte em int, com o mesmo valor
Depois disso, todos os dois valores associados a um operador ou são int (Incluindo o tempo e não assinado modificadores) ou flutuar (Equivalente a dupla e long double na mikroC PRO para PIC).
1. Se um dos operandos for float, o outro operando é convertido para float. 2. Caso contrário, se um dos operandos for unsigned long, o outro operando é convertido para unsigned long. 3. Caso contrário, se um dos operandos for longo prazo, então o outro operando é convertido para tempo. 4. Caso contrário, se um dos operandos for unsigned, o outro operando é convertido para não assinado. 5. Caso contrário, ambos os operandos são int.
O resultado da expressão é do mesmo tipo que a dos dois operandos. Aqui estão alguns exemplos de conversão implícita:
2 + 3.1 04/05 * 3. 3. * 04/05
/ *? 2. + 3.1? 5.1 * / / *? (04/05) * 3. ? 1 * 3. ? 1 .* 3. ? 3. * / / *? (3 .* 5) / 4? (3 .* 5.) / 4? 15. / 4? 15. / 4. ? 3,75 * /
Ponteiro de conversão
Tipos ponteiro pode ser convertidas para outros tipos de ponteiro usando o mecha typecasting- nismo:
char * Str; int * Ip; str = (char *) De IP;
Mais genericamente, o elenco * Tipo irá converter um ponteiro para o tipo "Ponteiro para tipo ".
www.mecatronicadegaragem.blogspot.com
192
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Concersions tipo explícito (conversão de tipo)
Na maioria das situações, o compilador irá fornecer uma conversão automática implícita de tipos quando necessário, sem qualquer interferência do usuário. Além disso, o usuário pode converter explicitamente um operando em outro tipo usando o operador unário prefixo distribuir os papéis operador:
(Tipo) de objeto
Isto irá converter objeto a um especificada tipo. Parênteses são obrigatórios.
Por exemplo:
/ * Vamos ter duas variáveis do tipo char * / char a, b;
/ * Linha a seguir para coagir um unsigned int * / (Unsigned int) a;
/ * Linha a seguir irá coagir a dobrar,
b então forçar a dupla automaticamente, * /: Resultando num valor do tipo double
(Double) a + b; / / equivalente a ((double) a) + b;
Declarações
A declaração apresenta um ou vários nomes para um programa - informa o compil- er o que o nome representa, o que é seu tipo, o que operações são permitidas com ele, etc Esta seção revisa os conceitos relacionados às declarações: declarações, definições, especificadores de declaração e inicialização.
A gama de objetos que podem ser declaradas inclui:
- Variáveis Constantes - - Funções -Tipos - Tags estrutura sindical, e enumeração membros Estrutura - membros da União Europeia - - Matrizes de outros tipos - Declaração de rótulos - Preprocessor macros
Mikroelektronika - Soluções de software e hardware para o mundo embutido
193
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Declarações e Definições
Definindo declarações, também conhecido como definições, ao lado de introduzir o nome de um objeto, também estabelecer a criação (onde e quando) de um objeto, isto é, a alocação ção da memória física e sua inicialização possível. Referenciando declarações, ou apenas declarações, basta fazer seus identificadores e tipos conhecidos para o compilador.
Aqui está uma visão geral. Declaração é também uma definição, excepto se:
- Declara uma função sem especificar o seu corpo - Tem o extern especificador, e não tem Inicializador ou organismo (no caso de func.) - É o typedef declaração Não pode ser declarações de referência para muitos o mesmo identificador, especialmente em um declaração de vários programas, mas apenas uma definição para esse identificador é permitido.
Por exemplo:
/ * Aqui está uma declaração de Max nondefining função; * / / * Se limitou a informar compilador que máxima é uma função * / int max ();
/ * Aqui está uma definição do valor máximo da função: * / int max (int x, int y) {
retorno (X> y =)? x: y; }
/ * Definição da variável i * / int i;
/ * Seguindo a linha é um erro, eu já está definido! * / int i;
Declarações e declarators
A declaração contém especificador (s), seguido por um ou mais identificadores (decla- res). A declaração começa com especificadores de classe de armazenamento opcional, especificadores de tipo, e outros modificadores. Os identificadores são separados por vírgulas e a lista é termi- nados por um ponto e vírgula.
Declarações de identificadores de variáveis têm o seguinte padrão:
armazenamento de classe [qualificador de tipo] Tipo var1 [= inic1], var2 [= inic2], ... ;
onde var1, var2, ... são qualquer seqüência de identificadores distintos com inicializadores opcional. Cada uma das variáveis é declarado de Tipo, se omitido, tipo padrões para int. A especificador armazenamento de classe pode tomar os valores externo, estático, registrar, ou o
194
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
padrão auto. Opcional tipo de qualificação pode assumir valores const ou voláteis. Para mais detalhes, consulte as classes de armazenamento e de qualificação de tipo.
Por exemplo:
/ * Cria três variáveis do tipo inteiro chamado x, y e z e inicializar X e Y para os valores 1 e 2, respectivamente: * /
int x = 1, y = 2, z / / z continua a ser inicializado
/ * Criar um q variável de ponto flutuante com modificador estático,
e inicializá-lo para 0,25: * / float estático q = 0,25;
Estas são todas as declarações de definição, o armazenamento é alocado e qualquer inicializadores opcional são aplicadas.
Linkage
Um programa executável é normalmente criado através da compilação de vários independentes trans- unidades de lamento, em seguida, ligando os arquivos com as bibliotecas de objeto resultante preexistente. Um termo unidade de tradução que se refere a um arquivo de código fonte, juntamente com todos os arquivos incluídos, mas com- as linhas de origem omitida pelas directivas de pré-processamento condicional. Um problema aris- es quando o mesmo identificador é declarado em escopos diferentes (por exemplo, em diferentes arquivos), ou declarada mais de uma vez no mesmo escopo.
A articulação é um processo que permite que cada instância de um identificador deve ser associado corretamente com um determinado objeto ou função. Todos os identificadores têm uma ligação de dois atributos, estreitamente relacionado com o seu âmbito: ligação externa ou a ligação interna. Estes atributos são determinados pela localização e formato de suas declarações, togeth- er com um uso (ou implícitas por default) explícita do especificador de classe de armazenamento estáticas ou externo.
Cada instância de um identificador específico com ligação externa representa o mesmo objeto ou função em toda a conjunto de arquivos e bibliotecas que compõem o pro- grama. Cada instância de um identificador específico com ligação interna representa o mesmo objeto ou função dentro de um único arquivo.
Regras de Linkage
Os nomes locais têm ligações internas, o mesmo identificador pode ser usado em diferentes arquivos
www.mecatronicadegaragem.blogspot.com
para significar diferentes objetos. Global nomes têm ligações externas; identificador significa o mesmo objeto ao longo de todos os arquivos do programa. Se o mesmo identificador aparece com ligação interna e externa dentro do mesmo arquivo, o identificador terão ligação interna.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
195
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Linkage Regimento Interno
1. nomes de alcance arquivo, explicitamente declaradas como estático, tem ligação interna 2. nomes de alcance arquivo, explicitamente declaradas como const e não explicitamente declarado
como externo, têm ligação interna 3. typedef nomes têm ligações internas 4. constantes enumeração tem ligação interna
Linkage regras externas
1. nomes de alcance de arquivo, que não satisfaçam a qualquer das afirmado anteriormente interna regras de articulação, têm ligação externa
A classe de armazenamento especificadores auto e Registre-se não pode aparecer em uma externa dezembro- vai fazendo. Não existe definição mais do que uma externa pode ser dado para cada identificador de unidade de tradução declarado com ligação interna. Uma definição externa é uma externa declaração que define um objeto ou uma função e também aloca um dispositivo de armazenamento. Se um identificador declarado com ligação externa é usada em uma expressão (excepto como parte do operando da sizeof), então exatamente uma definição externa desse identificador deve estar em algum lugar todo o programa.
Classes de armazenamento
Associando os identificadores de objetos requer que cada identificador para ter pelo menos dois attrib- nutos: classe de armazenamento e tipo (por vezes referido como o tipo de dados). A mikroC PRO para PIC compilador deduz destes atributos a partir de declarações implícitas ou explícitas no código-fonte.
A classe de armazenamento dita a localização (segmento de dados, registo, heap ou pilha) de objeto e sua duração ou vida (o tempo todo funcionamento do programa, ou durante execução de alguns blocos de código). Uma classe de armazenamento pode ser estabelecido pelo sin- fiscal de uma declaração, por sua colocação no código-fonte, ou por ambos os fatores:
tipo de armazenamento de classe identificador
O armazenamento especificadores de classe no mikroC PRO para PIC são:
auto Registre-se estáticas extern
www.mecatronicadegaragem.blogspot.com
196
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Auto A auto modificador é usado para definir que uma variável local tem uma duração local. Esta é o padrão para as variáveis locais e raramente é usada. auto não pode ser usado com globals. Veja também as funções.
Registre-se No momento o modificador Registre-se tecnicamente não tem nenhum significado especial. A mikroC PRO para PIC compilador simplesmente ignora os pedidos de atribuição de registo.
Estático Um nome global declarada com o estáticas especificador tem ligação interna, o que significa que ela é local para um determinado arquivo. Veja Linkage para mais informações.
Um nome local declarada com o estáticas especificador tem duração estática. Use estáticas com uma variável local para preservar o valor passado entre chamadas sucessivas à função que desempenha. Ver Duração para mais informações.
Extern Um nome declarado com o extern especificador tem ligação externa, a menos que tenha sido anteriormente declarados como tendo ligação interna. A declaração não é uma definição se tem o extern especificador e não é inicializado. A palavra-chave extern é opcional para um Função protótipo.
Use o extern modificador para indicar que o armazenamento real e do valor inicial do variável, ou corpo da função, é definido em um módulo separado do código-fonte. Func- ções declaradas com extern são visíveis em todos os arquivos-fonte do programa, menos que a função é redefinida como estático.
Veja Linkage para mais informações.
Tipo, qualificação
Os qualificadores do tipo const e voláteis são opcionais nas declarações e não realmente afetar o tipo de objeto declarado.
Eliminatórias Const
O qualificador const implica que um objeto declarado não irá alterar o seu valor durante tempo de execução. Em declarações com o const qualificador de todos os objetos precisam ser inicializadas.
A mikroC PRO para PIC trata objetos declarados com o const qualificador o mesmo como literais ou constantes de pré-processamento. Se o usuário tenta alterar um objeto declarado com o const compilador qualificador irá reportar um erro.
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido 197
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Por exemplo:
const PI dupla = 3,14159;
Qualificador volátil
O qualificador voláteis implica que uma variável pode alterar seu valor durante a execução independentemente do programa. Use o modificador volátil para indicar que uma variável pode ser alterado por uma rotina de fundo, uma rotina de interrupção, ou a porta I / O. Declarando um objeto a ser voláteis, adverte o compilador não fazer suposições sobre o valor de um objeto ao mesmo tempo avaliar expressões em que ela ocorre porque o valor do podem ser alteradas a qualquer momento.
Especificador typedef
O especificador typedef introduz um sinônimo para um tipo especificado. O typedef dezembro- combinar declarações são usadas para construir mais curto ou mais nomes convenientes para os tipos já definida pela linguagem ou declarada pelo usuário. O especificador typedef ocupa o primeiro lugar na declaração:
typedef <type_definition> sinónimos;
A typedef palavra-chave atribui sinônimo de <type_definition>. A sinônimo deve ser um identificador válido. Uma declaração a partir do typedef especificador não introduz um objeto ou uma função de um determinado tipo, mas sim um novo nome para um determinado tipo. Em outras palavras, o declaração typedef é idêntico a um"Normal" declaração, mas em vez de objetos, declara tipos. É uma prática comum para nomear identificadores tipo personalizado com início de ing letra maiúscula - isso não é exigido pelo mikroC PRO para a PIC. Por exemplo:
/ * Vamos declarar uma sinônimo de "unsigned long int" * / unsigned int typedef longo Distância;
/ * Agora, sinônimo "Distância" pode ser utilizado como identificador de tipo: * / Distância i; / / declara variável i de int unsigned long
Na typedef declaração, como em qualquer outra declaração, vários tipos podem ser declarado de uma vez. Por exemplo:
typedef int
* PTI, Array [10];
Aqui, Pti é um sinônimo para o tipo "Ponteiro para int ", e Array é um sinônimo para o tipo "Matriz de 10 int elementos ". asm Declarações
198
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
A mikroC PRO para PIC permite a incorporação de montagem no código-fonte por meio da declaração asm. As declarações _asm e _asm Também são permitidas no mikroC PRO para PIC e têm o mesmo significado. Note-se que cannnot numerais ser usados como endereços absolutos de SFR e GPR variáveis em instruções de montagem. Nomes simbólicos pode ser utilizado em substituição (anúncio será exibido estes nomes, bem como endereços).
As instruções de montagem podem ser agrupados pela asm palavra-chave (ou _, Ou _asm):
asm {
bloco de instruções de montagem }
Existem duas maneiras de embeding instruções de montagem único código C:
asm instruções de montagem;
e
asm instruções de montagem
Nota: O ponto e vírgula e LF são encerra âmbito asm para instruções de montagem único. Este é a razão pela qual a sintaxe a seguir não é bloco asm:
asm
{ bloco de instruções de montagem }
Este código será interpretado como única linha asm vazio seguido pelo composto C declaração.
A mikroC PRO para PIC comentários (tanto de linha única e multi-linha) são permitidos em incorporado código de montagem.
Se você tem uma variável global "g_var", que é do tipo longo (ou seja, 4 bytes), estiver de acessá-lo assim:
MOVF _g_var 0, 0 MOVF _g_var 1, 0 MOVF _g_var 2, 0 MOVF _g_var 3, 0
; Coloca byte menos significativo de g_var no registo W ; Segundo byte de _g_var; corresponde a Oi (g_var) ; Superior (g_var) ; Máxima (g_var)
... etc Se você quiser saber detalhes sobre a sintaxe asm apoiado por mikroC PRO para PIC ele é recomendado para estudar asm lst e arquivos gerados pelo compilador. Também é recomend- ed para verificar "as linhas de código Incluir nos arquivos de saída" na caixa Configurações de saída
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO 199
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Nota: Compiler não esperar que os bancos de memória para ser alterado dentro do conjunto código. Se o usuário quiser Para fazer isso, então ele deve restaurar o banco de seleção anterior.
tópicos relacionados: mikroC PRO para PIC specifcs
Inicialização
O valor inicial de um objeto declarado pode ser definido no momento da declaração (initializa- ção). Uma parte da declaração que especifica a inicialização é chamado inicializador.
Inicializadores para globals e estáticas objetos devem ser constantes ou expressões constantes- sões. O inicializador para um objeto automático pode ser qualquer expressão jurídica que ava- minado a uma atribuição compatível com valor para o tipo das variáveis envolvidas.
tipos escalares são inicializados com uma única expressão, que opcionalmente pode ser fechado chaves. O valor inicial de um objeto é o da expressão, as mesmas restrições para o tipo e conversões para atribuições simples são aplicados para inicializações também.
Por exemplo:
int i = 1; char * S = "Olá"; struct c complexo = {0,1, -0,2}; / / Onde "complexo" é uma estrutura (float, float)
Para estruturas ou uniões com duração de armazenamento automático, o inicializador deve ser um dos seguintes procedimentos:
- Uma lista de inicializador. - A única expressão compatível com o sindicato ou o tipo de estrutura. Neste caso, a inicial valor do objeto é o da expressão.
Por exemplo:
struct dot {int x; int y;} {m = 30, 40};
Para mais informações, consulte Estruturas e Sindicatos.
Além disso, você pode inicializar matrizes do tipo de personagem com uma seqüência literal, opcionalmente entre chaves. Cada personagem na seqüência de caracteres, incluindo o terminador nulo, inicial- izes elementos sucessivos na matriz. Para obter mais informações, consulte Matrizes. Inicialização automática
A mikroC PRO para PIC não fornecer a inicialização automática para objetos. Unini-
200 Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
globals tialized e objetos com duração estática terá valores aleatórios de mem- teoria.
FUNÇÕES
As funções são centrais para a programação C. As funções são geralmente definidas como subprogramas gramas que retornar um valor baseado em uma série de parâmetros de entrada. Valor de retorno da função pode ser usada em expressões - tecnicamente, chamada de função é considerada ser uma expressão como outra qualquer.
C permite que uma função para criar resultados que não o seu valor de retorno, denominada lado os efeitos. Muitas vezes, o valor de retorno da função não é usada, dependendo do lado os efeitos. Essas funções são equivalentes às procedimentos linguagem de programação de outras linguagens, como Pascal. C não faz distinção entre procedimento e função - funções os dois papéis.
Cada programa deve ter uma única função externo chamado principal marcando a entrada ponto do programa. As funções são normalmente declarado como protótipos no padrão ou fornecido pelo usuário arquivos de cabeçalho, ou dentro de arquivos de programa. Funções têm ligação externa por padrão e são normalmente acessíveis a partir de qualquer arquivo no programa. Isso pode ser restrita usando o estáticas classe de armazenamento especificador na declaração da função (ver Classes de armazenamento e ligação).
Nota: Verifique as especificidades PIC para obter mais informações sobre as funções ' limitações na Microcontroladores PIC compatível.
Função Declaração
As funções são declaradas em arquivos do usuário de origem ou disponibilizar, ligando-precom empilhados bibliotecas. A sintaxe da declaração da função é:
function_name tipo (parâmetro-declarator-list);
A function_name deve ser um identificador válido. Esse nome é usado para chamar a fun- ção, ver as chamadas de função por mais da informação.
tipo representa o tipo de resultado da função, e pode ser de qualquer padrão ou usuário tipo definido. Para funções que não retornam valor vazio tipo deve ser usado. O tipo pode ser omitida nas declarações função global, e assumirá a função int tipo por padrão.
Tipo de função também pode ser um ponteiro. Por exemplo, float * significa que uma função resultado é um ponteiro para float. O ponteiro genérico void * também é permitido.
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
201
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
A função não pode retornar uma matriz ou de outra função.
Dentro parênteses, declarator parâmetro-lista é uma lista de argumentos formais que a função recebe. Estes declarators especificar o tipo de cada parâmetro de função. O compilador usa essa informação para verificar a validade das chamadas de função. Se a lista é vazio, um função não tem argumentos. Além disso, se a lista é vazio, uma função Também não tem quaisquer argumentos, note que este é o caso somente quando vazio pode ser usado como um tipo de argumento.
Ao contrário de declaração de variável, cada um argumento na lista de suas necessidades de especificador de tipo próprio e qualificador possível const ou voláteis.
Protótipo de função
A função pode ser definido apenas uma vez no programa, mas pode ser declarado várias vezes, supondo que as declarações são compatíveis. Quando declarar uma função, o formal argumento o identificador não precisa ser especificado, mas faz seu tipo.
Esse tipo de declaração, vulgarmente conhecida como a protótipo da função, permite uma melhor controle sobre número de argumento, verificação de tipo e conversões de tipo. O nome de um parâmetro no protótipo de função tem o seu âmbito limitado ao protótipo. Isso permite que um parâmetro identificador de ter nomes diferentes em declarações diferentes de uma mesma função:
/ * Aqui estão dois protótipos da mesma função: * /
int teste (const char *) int teste (p const char *)
/ * Declara * Teste de função / / * Declara a mesma função de teste * /
Função protótipos são muito úteis na documentação de código. Por exemplo, a função Cf_Init tem dois parâmetros: Controle de porta e porta de dados. A questão é, que é qual? O protótipo de função:
vazio Cf_Init (char * Ctrlport, char * Dataport);
deixa claro. Se um arquivo de cabeçalho contém protótipos de função, o usuário pode ler que arquivo para obter as informações necessárias para escrever programas que chamar essas funções. Se um parâmetro protótipo inclui um identificador, então o Indentificador é usado apenas para o erro verificação.
202
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Definição de Função
Definição da função consiste em sua declaração e função do corpo. A corpo da função é tecnicamente um bloco - uma seqüência de definições locais e instruções entre dentro de chaves {}. Todas as variáveis declaradas dentro do corpo da função são locais à função, ou seja, têm um alcance de função.
A própria função só pode ser definido no âmbito do arquivo, o que significa que fun- ção declarações não podem ser aninhados.
Para retornar o resultado da função, use o retorno declaração. O retorno na declaração funções do vazio tipo não pode ter um parâmetro - na verdade, a instrução de retorno pode ser omitido por completo, se é a última declaração no corpo da função.
Aqui está uma definição de função de exemplo:
/ * Função max retorna mais um dos seus dois argumentos: * /
int max (int x, int y) {
retorno (X> y =)? x: y; }
Aqui está uma pequena função que depende de efeitos colaterais em vez de valor de retorno:
/ * Função Descartes converte coordenadas (x, y) para polares (r, fi): * / # Include <math.h>
vazio polar (dupla x, dupla y, dupla * R, dupla * Fi) {
* R = sqrt (x * x + y * y); * Fi = (x == 0 & & y == 0)? 0: atan2 (y, x); retorno; / * essa linha pode ser omitido * /
}
Function reentrância
reentrância funções é permitido se a função não tem parâmetros e locais vari- veis, ou se as variáveis locais são colocadas no espaço de Rx. Lembre-se que o PIC tem pilha e memória limitações que podem variar muito entre os MCUs.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
203
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Idioma Referência mikroC PRO para PIC
Chamadas de função e argumento de conversão
Chamadas de função
A função é chamada com argumentos reais colocados na mesma seqüência em que seus correspondentes parâmetros formais. Use a função chamada operador ():
function_name (expression_1, ..., expression_n)
Cada expressão na chamada de função é uma argumento real. Número e tipos de argumentos reais devem coincidir com as dos parâmetros da função formal. Se os tipos não partida, as conversões de tipo implícitas regras serão aplicadas. argumentos reais podem ser de qualquer complexidade, mas a ordem da sua avaliação não é especificado.
Após a chamada de função, todos os parâmetros formais são criados como objetos locais inicializado os valores dos argumentos reais. Após voltar de uma função, um objeto temporário é criado no local da chamada, e é inicializado com a expressão do retorno declaração. Isto significa que a chamada de função como um operando na expressão complexa é tratada como um resultado da função.
Se a função tem nenhum resultado (tipo resultado nulo) ou o não é necessário, em seguida, o fun- da de consulta pode ser escrita como uma expressão de auto-contidas.
Em C, os argumentos escalares são sempre passados para a função de valor. A função pode modificar os valores dos seus parâmetros formais, mas este não tem efeito sobre o argumento real- mentos na rotina de chamada. Um objeto escalar podem ser passadas através do endereço, se uma for- parâmetro formal for declarado como um ponteiro. O objeto pontiagudo pode ser acessado por * usando o operador de indireção.
/ / Por exemplo, Soft_Uart_Read leva o ponteiro para a variável de erro, / / Para que ele possa alterar o valor de um argumento real: Soft_Uart_Read (e erro);
/ / O código a seguir seria errado, você deve passar o valor / / Variável de erro para a função: Soft_Uart_Read (erro);
Argumento Conversões
Se um protótipo de função não tenha sido previamente declarada, o mikroC PRO para PIC converte argumentos integral para uma função chamada de acordo com o aumento integral (Expansão) regras descritas no Standard conversões. Se um protótipo de função está em escopo, o mikroC PRO para PIC converte o argumento passado para o tipo de parâmetro declarado de acordo com as mesmas regras de conversão como em estado de atribuição mentos.
www.mecatronicadegaragem.blogspot.com
204
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Se um protótipo estiver presente, o número de argumentos devem ser iguais. Os tipos necessidade de ser compatível apenas na medida em que uma tarefa pode convertê-los legalmente. A utilizador pode sempre usar uma conversão explícita para converter um argumento para um tipo que é acei- capaz de um protótipo de função.
Nota: Se o protótipo da função não corresponde a definição da função real, o mikroC PRO para PIC irá detectar isto se e somente se essa definição está na mesma unidade de compilação como o protótipo. Se você criar uma biblioteca de rotinas com o arquivo de cabeçalho correspondente protótipos, considerar a inclusão que o arquivo de cabeçalho quando você compilar a biblioteca, de modo que qualquer discrepâncias entre os protótipos e definições reais serão detectados.
O compilador também é capaz de forçar argumentos para alterar o tipo para uma adequada. Considere o seguinte código:
int limite = 32; char ch = 'A'; tempo res;
/ Protótipo / extern longo func (longa par1, tempo par2);
main () {
... res = func (ch-limite); / Chamada de função /
}
Desde que o programa tem a função protótipo para função, ele converte limite e ch para tempo, usando as regras de atribuição, antes de coloca-los na pilha para a chamada para func.
Sem o protótipo da função, limite e ch seria colocada na pilha como um inteiro e um personagem, respectivamente, nesse caso, a pilha passado para func não combinar com o tamanho ou o conteúdo que func espera, que pode causar problemas.
Reticências Operador ('...')
O ('...') reticências é composto por três períodos sucessivos, sem espaços de intervenção. Uma elipse pode ser usado nas listas argumento formal de protótipos de função para indicar uma número variável de argumentos ou argumentos com tipos variados. Por exemplo:
vazio func (int n, char ch, ...);
Esta declaração indica que a função será definida de tal forma que as chamadas devem ter pelo menos dois argumentos, int e char, mas também pode ter qualquer número de além- argumentos al.
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido 205
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem
Exemplo:
# Include <stdarg.h>
int addvararg (char ,...){ A1 ap va_list; char temp; va_start (AP, A1);
while (temp = va_arg (ap, char))
temp + = a1; retorno a1; }
int res; vazio main () {
addvararg res = (1,2,3,4,5,0);
addvararg res = (1,2,3,4,5,6,7,8,9,10,0);
}
mikroC PRO para PIC
206
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
OPERADORES
Operadores são símbolos que provocam alguma computação quando aplicado a variáveis e outros objetos em uma expressão.
Operadores Aritméticos Operadores de Atribuição Operadores bit a bit Operadores lógicos Referência / Operadores Indireta Os operadores relacionais Membro Seletores Estrutura
Operador Vírgula , Operador condicional ? :
Matriz do operador subscrito [] Função de operador de call ()
sizeof Operador
Preprocessor Operadores # e # #
Mikroelektronika - Soluções de software e hardware para o mundo embutido
207
www.mecatronicadegaragem.blogspot.com
Precedência Operando
Operadores Associativis 15 2 () []. ->
14 1 ! ~ + + - + - * & (Tipo) sizeof
13 2 *% /
12 2 + -
11 2 <<>>
10 2 <<=>> =
9 2 ==! =
8 2 &
7 2 ^
6 2 |
5 2 & &
4 2 | |
3 3 ?:
2 2 = *= / =% = + = -= & ^ = | = <<=>>
1 2 ,
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Operadores Presidence e Associativismo
Há 15 categorias de precedência, alguns deles contêm um único operador. Operadores na mesma categoria têm a mesma precedência.
Se duplicatas de operadores aparecem na tabela, a primeira ocorrência é unário e segundo binário. Cada categoria tem uma regra de associatividade: da esquerda para a direita (
), Ou da direita para a
esquerda (
). Na ausência de parênteses, essas regras resolver um agrupamento de expres-
ções com os operadores de precedência igual.
Operadores Aritméticos
Os operadores aritméticos são usados para realizar cálculos matemáticos. Eles têm operandos numéricos e retornar os resultados numéricos. O tipo de char tecnicamente repre- senta números inteiros pequenos, de modo que o char variáveis podem ser usadas como operandos em aritmética operações.
Todos os operadores aritméticos associam da esquerda para a direita.
208
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Operador Operação Precedência Operadores Binários
+ Além 12
- subtração 12
* multiplicação 13
/ divisão 13
% operador de módulo retorna o resto da inteiro divisão (não pode ser usado com pontos flutuantes)
13
Operadores unários
+ mais unário não afeta o operando 14
- unário mudanças menos o sinal do operando 14
+ + incremento adiciona um ao valor do operando.
PostIncrement adiciona um ao valor do operando depois que ele avalia, enquanto pré-incremento adiciona uma
t d li
14
- decremento subtrai um do valor da
operando. Postdecrement subtrai um do valor do operando depois que ele avalia, enquanto pré-
di i i b i d li
14
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Nota: O operador * é sensível ao contexto e também pode representar a referência de ponteiro operador.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
209
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Binário Operadores aritméticos
Divisão de dois números inteiros retorna um inteiro, enquanto a restante é simplesmente truncado:
/ * Por exemplo: * / 04/07 / * equivale a 1 * / 7 * 04/03 / * equivale a 5 * /
/ * Mas * / 7. * 3. / 4.; / * Igual a 5,25, porque estamos trabalhando com flutuadores * /
Restante operando % trabalha apenas com números inteiros, o sinal do resultado é igual ao sinal do primeiro operando:
/ * Por exemplo: * / 9% 3; / * igual a 0 * / 7% 3 / * equivale a 1 * / -7% 3; / * igual a -1 * /
Aritmética Os operadores podem ser usados para manipular caracteres:
'A' + 32; 'G' - 'A' + 'a';
/ * * É igual a 'A' (ASCII) / / * É igual a 'g' (ASCII e EBCDIC) * /
Operadores aritméticos unários
Unários operadores + + e - são os únicos operadores em C que pode ser prefixo (Por exemplo, + + K, - K) ou postfix (por exemplo, k + +, k -).
Quando usado como prefixo, os operadores + + e - (Pré-incremento e preDecrement) adicionar ou subtrair um valor do operando antes da avaliação. Quando usado como sufi- correção, os operadores + + e - (Pós e postdecrement) adicionar ou subtrair uma do valor do operando após a avaliação.
Por exemplo:
int j = 5; j = k + +;
mas:
int j = 5; j = k + +;
/ * k = k + 1, k = j, o que nos dá k = 6, j = 6 * /
/ * K = j, k = k + 1, que nos dá k = 5, j = 6 * /
210
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Operador Operação Precedência
== igualdade 9
! = não igual 9
> superior 10
< menos de 10
> = igual ou superior 10
<= inferior ou igual 10
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Os operadores relacionais
Use operadores relacionais para testar a igualdade ou desigualdade de expressões. Se uma expres- Sion avalia ser verdadeiro, ele retorna 1, caso contrário ele retorna 0.
Todos os operadores relacionais associam da esquerda para a direita.
Visão geral sobre operadores relacionais
Operadores relacionais em expressões
Precedência dos operadores aritméticos e relacionais é designado de modo a permitir expressões complexas sem parênteses para esperar significado:
a + 5> = c - 1.0 / e
/ *? (A + 5)> = (c - (1,0 / e)) * /
Não se esqueça que os operadores relacionais retornam 0 ou 1. Considere o seguinte exemplos:
/ * Ok: * / 5> 7 10 <20 =
/ * Retorna 0 * / / * Retorna 1 * /
/ * Isso pode ser complicado: * / 13 8 ==> 5 / * Retorna 0, como: 8 == (13> 5)? 8 == 1 ? 0 * / 14> 5 < 3 / * retorna 1, como: (14> 5) <3? 1 <3? 1 * / a <b <5 / * retorna 1, como: (a <b) <5? (0 ou 1) <5? 1 * /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
211
www.mecatronicadegaragem.blogspot.com
Operador Operação Precedência
& E bit a bit; compara pares de bits e retorna 1 se ambos os bits forem 1, caso contrário retorna 0
8
| bit a bit (inclusive) OR; compara pares de bits e retorna 1 se um ou ambos os bits são 1, caso contrário retorna 0
6
^ bit a bit OU exclusivo (XOR); compara pares de bits e retorna 1 se os bits são complementares, outras
retorna sábio 0 7
~ bit a bit complemento (unário); inverte cada bit 14
<< desvio para a esquerda bit a bit; move os bits para a esquerda, as devoluções
bi i à d ib i 0 bi i à
11
>> deslocamento à direita bit a bit; move os bits para a direita, dis- cartões bit da extrema-direita e se unsigned atribui 0
11
& 0 1
0 0 0
1 0 1
^ 0 1
0 0 1
1 1 0
| 0 1
0 0 1
1 1 1
~ 0 1
1 0
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Operadores bit a bit
Usar os operadores bit a bit para modificar bits individuais dos operandos numéricos.
Operadores bit a bit adjunto da esquerda para a direita. A única exceção é o com-bit a bit operador plementar ~ que associa a partir de direita para a esquerda.
Visão geral sobre operadores bit a bit
Operações Lógicas sobre Nível de Bit
Operadores bit a bit &, | e ^ realizar operações lógicas sobre os pares apropriado de bits de seus operandos. Operador ~ complementa cada bit do seu operando. Por exemplo:
212
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
0x1234 e 0x5678
/ * Igual a 0x1230 * /
Referência da Linguagem
/ * Porque ..
0x1234: 0001 0010 0011 0100 0x5678: 0101 0110 0111 1000 ----------------------------
E: 0001 0010 0011 0000
.. ou seja, 0x1230 * /
/ * Do mesmo modo: * /
0x1234 | 0x5678; ^ 0x1234 0x5678; ~ 0x1234;
/ * Igual * 0x567C / / * Igual * 0x444C / / * Igual * 0xEDCB /
Nota: O operador & também pode ser um operador de referência de ponteiro. Consulte os ponteiros para mais informações.
Shift Operadores bit a bit
Operadores binários << e >> mover os bits do operando à esquerda por uma série de po- ções especificado pelo operando da direita, à esquerda ou à direita, respectivamente. Operando direito tem que ser positivo.
Com o deslocamento à esquerda (<<), bits à esquerda são descartados e"Novo" bits à direita são atribuídos zeros. Assim, deslocando operando sem sinal para a esquerda n posições é equivalente a multiplicando-se por 2n se todos os bits são descartados zero. Isso também é válido para operandos assinado Se todos os bits são descartados igual a um bit de sinal.
000.001 << 0x3801 <<
5; 4;
/ * Equivale a 000.040 * / / * Igual a 0x8010, estouro! * /
Com o deslocamento para a direita (>>), extrema-direita bits são descartados e os "Libertado" bits à esquerda são zeros atribuídos (no caso do operando sem sinal) ou o valor de um bit de sinal (no caso de assinado operando). Mudando operando para a direita por posições n é equivalente a divid- ing-lo por 2n.
0xFF56>> 0xFF56u>>
4; 4;
/ * Equivale 0xFFF5 * / / * Equivale 0x0FF5 * /
Mikroelektronika
www.mecatronicadegaragem.blogspot.com
- Soluções de software e hardware para o mundo embutido 213
www.mecatronicadegaragem.blogspot.com
Operador Operação Precedência
& & E lógico 5
| | OR lógico 4
! negação lógica 14
| | 0 x
0 0 1
x 1 1
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Bitwise versus lógica
Não se esqueça da diferença de princípio entre a forma como os operadores bit a bit e lógica de trabalho. Por exemplo:
0222222 e 0555555; 0222222 e 0555555 &;
~ 0x1234; ! 0x1234;
/ * Equivale a 000.000 * / / * Equivale a 1 * /
/ * Igual * 0xEDCB / / * Igual a 0 * /
Operadores lógicos
Operandos de operações lógicas são consideradas verdadeiras ou falsas, que é diferente de zero ou zero. Os operadores lógicos sempre retornam 0 ou 1. Os operandos em uma expressão lógica deve ser de tipo escalar.
Os operadores lógicos & & e | | associam da esquerda para a direita. Lógico operador de negação ! associados da direita para a esquerda.
Visão geral sobre operadores lógicos
Operadores lógicos
Precedência dos operadores lógicos, relacionais e aritméticos foi designado como uma forma de permitir expressões complexas sem parênteses para ter uma expectativa de significado:
c> = '0 '& & c <= '9'; a + 1 == b | |! f (x);
/ * Lê: (c> = '0 ') & & (c <= '9') * / / * Lê: ((a + 1) == b) | | * / ((f (x))!)
E lógico & & retorna 1 se ambas as expressões avaliar a ser zero, caso contrário
214
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
& & 0 x
0 0 0
x 0 1
! 0 x
1 0
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
retorna 0. Se a primeira expressão é avaliada como false, o segunda expressão não será avaliados. Por exemplo:
a> b & & c <d / * lê como (a> b) & & (c <d) * / / * If (a> b) é falso (0), (c <d) não serão avaliadas * /
OU lógico | | retorna 1 se quer de expressão avalia a ser zero, caso contrário retorna 0. Se a primeira expressão é avaliada como verdadeira, a segunda expressão não é ava- liada. Por exemplo:
a & & b | | c & d & / * lê como: (a & & b) | | (c & d &) * / / * If (a & & b) é verdadeira (1), * (& c & d) não serão avaliados /
Expressões lógicas e lateral Efeitos
Regra geral sobre expressões lógicas complexas é que a avaliação das conse- comerciais e executivas pára lógica operandos no exato momento do resultado final é conhecido. Por exem- Por exemplo, se temos uma expressão a & & b & & c onde um é falso (0), então operandos b e c não serão avaliados. Isso é muito importante se b e c são expressões, como possíveis efeitos colaterais não vai acontecer!
Lógico versus Bitwise
Esteja ciente da diferença de princípio entre a forma como os operadores bit a bit e lógica de trabalho. Por exemplo:
0222222 e 0555555 0222222 e 0555555 e
~ 0x1234 ! 0x1234
/ * Equivale a 000.000 * / / * Equivale a 1 * /
/ * Igual * 0xEDCB / / * Igual a 0 * /
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
215
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Operador condicional? :
O condicional operador ? : é o único operador ternário em C. A sintaxe da condi- operador internacional é:
expressão1? expression2: expression3
A expression1 é avaliada primeiro. Se o valor for verdadeiro, então expression2 avalia e expression3 é ignorado. Se expressão1 é avaliada como falso, então expression3 avalia e expression2 é ignorado. O resultado será um valor de expres- sion2 ou expression3 dependendo de qual deles avalia.
Nota: O facto de apenas uma dessas duas expressões é avaliada muito importante se espera-se que produzem efeitos colaterais!
associados operador condicional da direita para a esquerda. Aqui estão alguns exemplos práticos:
/ * Encontrar max (a, b): * / max = (a> b)? a: b;
/ * Converte pequena carta para o capital: * / / * (Sem parênteses são realmente necessário) * / c = (c> = 'a' & & c <= 'z')? (C - 32): c;
Regras Operador Condicional
expression1 deve ser uma expressão escalar; expression2 e expression3 deve obedecer a uma das seguintes regras:
1. Ambas as expressões têm de ser de aritmética tipo. expression2 e expression3
estão sujeitos às conversões aritméticas usuais, que determina o tipo do resultado. 2. Ambas as expressões têm de ser compatíveis dos tipos struct ou união. O resultado
tipo é um tipo de estrutura ou união de expression2 e expression3. 3. Ambas as expressões têm de ser de vazio tipo. O tipo resultante é nulas. 4. Ambas as expressões devem ser do tipo ponteiro para versões qualificados ou não qualificados
de tipos compatíveis. O tipo resultante é um ponteiro para um tipo qualificado, com todo o tipo qualificadores do tipo apontado por ambas as expressões.
5. Uma expressão é um ponteiro, eo outro é um ponteiro constante nula. O resultado- ção tipo é um ponteiro para um tipo qualificado com todos os qualificadores do tipo ponto-tipos ed por ambas as expressões.
6. Uma expressão é um ponteiro para um tipo de objeto ou incompleta, eo outro é um ponteiro para uma versão qualificados ou não qualificados dos nulas. O tipo resultante é a de o ponteiro-para-não-vazio expressão.
216
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Operadores de Atribuição
Ao contrário de muitas outras linguagens de programação, C trata de atribuição de valores como a operação (Representada por um operador) ao invés de instrução.
Operador de atribuição simples
Para uma atribuição de valor comum, um operador de atribuição simples (=) é utilizados:
= expressão1 expressão2
A expression1 é um objeto (posição de memória) para que o valor de expression2 é atribuído. Operando expression1 tem que ser lvalue e expression2 pode ser qualquer expressão. A expressão de atribuição em si não é lvalue.
Se expression1 e expression2 são de tipos diferentes, o resultado da expres- sion2 serão convertidos para o tipo de expressão1, se for necessário. Consulte o Tipo Conversões para mais informações.
Operador de atribuição composto
C permite que as atribuições mais COMLEX por meio de operadores de atribuição compostos. A sintaxe dos operadores de atribuição composta são:
op = expressão1 expressão2
onde op pode ser um dos operadores binários +, -, *, /,%, &, |, ^, <<, ou >>.
Assim, temos 10 operadores de atribuição compostos diferentes: + =, -=, *= / =%, =, & =, | ̂ =, =, <<= e >> =. Todos eles associam da direita para a esquerda. sepa-Spaces Avaliação operadores compostos (por exemplo, + =) Irá gerar um erro.
atribuição composto tem o mesmo efeito que
expressão1 = expressão1 expressão2 op
exceto o lvalue expression1 é avaliada apenas uma vez. Por exemplo, expres- sion1 + = expressão2 é o mesmo que expressão1 = expressão1 + expres- sion2.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
217
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Regulamento de Atribuição
Para ambos os atribuição simples e compostos, os operandos expression1 e expression2 deve obedecer a uma das seguintes regras:
1. expression1 é do tipo aritmética qualificados ou não qualificados e expression2 é de
aritmética tipo. 2. expression1 tem uma versão qualificados ou não qualificados do tipo de estrutura ou união
compatível com o tipo de expression2. 3. expression1 e expression2 são ponteiros para as versões qualificados ou não qualificados
de tipos compatíveis eo tipo apontado pelo esquerdo tem todos os qualificadores do tipo apontado pela direita.
4. Quer expression1 ou expression2 é um ponteiro para um ou tipo de objeto incompleto eo outro é um ponteiro para uma versão qualificados ou não qualificados de vazio. O tipo de apontado pela esquerda tem todos os qualificadores do tipo apontado pelo direito.
5. expression1 é um ponteiro e expression2 é um ponteiro constante nula.
Operador sizeof
O operador unário prefixo sizeof retorna um inteiro que representa a constante tamanho do espaço de memória (em bytes) usado pelo seu operando (determinado pelo seu tipo, com algumas exceções). O operador sizeof pode apanhar um identificador de tipo ou uma expressão unário como um operando. Você não pode usar sizeof com expressões do tipo de função, tipos incompletos, parênteses os nomes de tais tipos, ou com lvalue que designa um objeto campo de bits.
Sizeof Aplicada à Expressão
Se aplicada a expressão, o tamanho de um operando é determinado sem avaliar a expressão (e, portanto, sem efeitos colaterais). O resultado da operação será o tamanho do tipo de resultado da expressão.
Sizeof Aplicada ao tipo
Se aplicada a um tipo de identificador, sizeof retorna o tamanho do tipo especificado. A unidade para o tamanho do tipo é sizeof (char) o que equivale a um byte. A operação tamanho de (char) dá o resultado 1, se char é assinado ou não assinado.
Assim:
sizeof (char) sizeof (int) sizeof (unsigned long) sizeof (float)
/ * / * / * / *
retorna retorna retorna retorna
1 2 4
4
* / * / * / * /
218
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Quando o operando é um parâmetro do tipo não-matriz, o resultado é o número total de bytes na matriz (em outras palavras, um nome de matriz não é convertido para um tipo de ponteiro):
int i, j, uma [10]; ... j = sizeof (a [1]); i = sizeof (a);
/ * J = sizeof (int) = 2 * / / * I = 10 * sizeof (int) = 20 * /
/ * Para obter o número de elementos em um array * / num_elem int = i / j;
Se o operando é um parâmetro declarado como tipo de matriz ou um tipo de função, sizeof dá o tamanho do ponteiro. Quando aplicada às estruturas e aos sindicatos, sizeof dá a número total de bytes, incluindo qualquer preenchimento. O operador sizeof não pode ser aplicada a uma função.
EXPRESSÃO
A expressão é uma seqüência de operadores, operandos e pontuadores que especifica um computação. Formalmente, as expressões são definidas recursivamente: subexpressões pode ser aninhados sem limite formal. No entanto, o compilador apresentará um erro de falta de memória se não é possível compilar uma expressão que é muito complexo.
Em ANSI C, o expressões primárias são: constante (também referida como literal), identi- Fier, e (expressão), definido de forma recursiva.
As expressões são avaliadas de acordo com uma conversão de certos agrupamentos, associativi- ty e regras de precedência, o que depende dos operadores utilizados, presença de paren- teses e tipos de dados dos operandos. A precedência ea associatividade dos Os operadores estão resumidas no Operador de Precedência e associatividade. O caminho operandos e subexpressões são agrupados não necessariamente especificar o real ordem em que são avaliados pelo mikroC PRO para a PIC.
As expressões podem produzir lvalue, rvalue, ou nenhum valor. Expressões podem causar efeitos secundários efeitos se produzem um valor ou não.
Vírgula Expressões
Uma das especificidades do C é que ela permite o uso da vírgula como um operador de seqüência para chamada forma expressões vírgula ou seqüências. expressão Vírgula é uma vírgula lista de expressões delimitados - é formalmente tratado como uma única expressão para que ele possa ser utilizado em locais onde a expressão é esperado. A seguinte seqüência:
expression 1, expression_2;
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
219
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
resultados na esquerda para a direita avaliação de cada expressão, com o valor eo tipo de expression_2 dando o resultado da expressão completa. Resultado da expression_1 é descartado.
vírgula operador binário (,) tem a prioridade mais baixa e associados da esquerda para a direito, de modo que a, b, c é o mesmo que (A, b), c Isto permite escrever seqüências com qualquer número de expressões:
expression_1, expression_2, ... expression_n;
o que resulta na avaliação da esquerda para a direita de cada expressão, com o valor e tipo de expression_n dando a resultado da expressão inteira. Os resultados de outras expressões são descartados, mas o seu (possível) efeito colateral acontecem.
Por exemplo:
resultado = (a, b = 5 / = 2, C + +); / * Retorna preincremented valor da variável c,
mas também intializes a, b divide por 2 e incrementos de c * /
resultado = (x = 10, y = x + 3, x -, z -= x * 3 - - y); / * Retorna calculado o valor da variável z,
e também calcula x * e y /
Nota
Não confunda operador vírgula (seqüência operadora) com pontuador vírgula que separa os elementos em um lista de funções e listas de discussão Inicializador. Para evitar ambi- vocos com vírgulas no argumento da função e lista de inicializador, use parênteses. Para exemplo,
função (i, (j = 1, j + 4), k);
chama a função func com três argumentos (i, 5, k), e não quatro.
220
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
DEMONSTRAÇÕES
Demonstrações especificar um fluxo de controle como o programa executa. Na ausência de Ir específicos e seleção declarações, os comandos são executados em seqüência na ordem de aparição no código-fonte.
As declarações podem ser divididos em:
- - - - - -
Rotulado Demonstrações Expressão Demonstrações Instruções de Seleção Instruções iteração (Loops) Ir Demonstrações Declarações compostas (blocos)
Rotulado Demonstrações
Cada instrução em um programa podem ser rotulados. Um rótulo é um identificador adicionado antes a declaração como esta:
label_identifier: instrução;
Não há nenhuma declaração especial de uma etiqueta - apenas "Tags" a declaração. label_iden- tifier tem escopo de uma função e no rótulo do mesmo não pode ser redefinido no mesma função.
Os rótulos têm o seu próprio espaço: etiqueta de identificação pode corresponder a qualquer outro identificador no o programa.
A declaração pode ser rotulado por duas razões:
1. O rótulo identificador serve como meta para a instrução goto incondicional,
2. O rótulo identificador serve como meta para a instrução switch. Para este efeito, apenas caso e padrão demonstrações rotulados são utilizados:
caso a expressão constante: instrução default: declaração
Mikroelektronika - Soluções de software e hardware para o mundo embutido
221
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Expressão Demonstrações
Qualquer expressão seguido por um ponto e vírgula faz uma declaração de expressão:
expressão;
A mikroC PRO para PIC executa uma instrução de expressão através da avaliação da expressão. Todos os efeitos colaterais desta avaliação sejam concluídas antes do próximo instrução inicia a execução. A maioria das declarações são expressão de atribuição do Estado mentos ou chamadas de função.
A declaração de nulidade é um caso especial, constituído por um único ponto e vírgula (;). O nulo declaração não faz nada e, portanto, é útil em situações onde o mikroC PRO para PIC sintaxe espera uma declaração, mas o programa não precisa de um. Por exem- plo, uma declaração de nulidade é comumente usado em "Vazio" loops:
para (; Q * + + * p = + +;);
/ * corpo deste loop é um comando nulo * /
Instruções de Seleção
Seleção ou declarações de controle de fluxo de selecionar um dos cursos alternativos de ação por testes de determinados valores. Existem dois tipos de declarações de seleção:
se switch
Se a Declaração
A se declaração é usada para implementar uma instrução condicional. A sintaxe da se afirmação é:
se (Expressão) [statement1 mais statement2]
Se expressão avalia a verdade, statement1 executa. Se declaração é falsa, statement2 executa. A expressão deve ser avaliada como um valor integral; outras sábio, a condição é mal formado. Parênteses em torno da expressão são obriga- ry.
A mais palavra-chave é opcional, mas não há indicações podem vir entre se e mais.
222
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Instrução if aninhada
Nested se demonstrações requerem maior atenção. A regra geral é que a nested condicionais são analisados a partir do mais íntimo condicional, com cada mais vinculado ao mais próximo disponível se em sua esquerda:
se (Expressão1) statement1 else if (Expression2)
se (Expression3) statement2 mais instrução3 / * Este pertence: se * (expression3) /
mais statement4 / * Este pertence: se * (expression2) /
Nota
# If e # Else declarações de pré-processamento (Directivas) semelhante ao se e mais declarações, mas têm efeitos muito diferentes. Eles controlam o que as linhas do arquivo de origem são compilada e que são ignorados.
Switch Demonstrações
A switch declaração é usada para passar o controle para um ramo do programa específico, com base em uma determinada condição. A sintaxe da switch afirmação é:
switch (Expressão) {
caso constante-expression_1: statement_1; . . .
caso expression_n constante: statement_n; padrão [ : Declaração;]
}
Primeiro, o expressão (Condição) é avaliada. A switch declaração, em seguida, com- bora la a todos os disponíveis constante, as seguintes expressões a palavra-chave caso. Se um jogo for encontrado, switch passa o controle para que a adequação caso fazendo com que o declaração fol- tes da partida avalia. Note-se que constantes expressões de deve avaliar a inteiro. Não é possível ter duas mesmo expressões constantes avaliar a o mesmo valor.
Parênteses em torno expressão são obrigatórios.
Ao encontrar uma correspondência, o fluxo do programa continua normalmente: as instruções a seguir será executado de forma natural, independentemente da possível caso etiqueta. Se nenhum caso satisfaz a condição, a padrão caso avalia (se o rótulo padrão é especi- cados).
www.mecatronicadegaragem.blogspot.com
Por exemplo, se uma variável i tem valor entre 1 e 3, a opção seguinte seria
Mikroelektronika - Soluções de software e hardware para o mundo embutido 223www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem
sempre devolvê-lo como 4:
mikroC PRO para PIC
switch
caso caso caso
(I) { 1: i + +; 2: i + +; 3: i + +;
}
Para evitar a avaliação de qualquer outros casos, e abandonar o controle de comutador, cada caso deve ser encerrado no intervalo.
Aqui é um simples exemplo, com switch. Suponha que temos uma variável fase com apenas Três estados diferentes (0, 1 ou 2) e uma função correspondente (evento) para cada uma dessas Estados. Isto é como nós poderíamos mudar o código para o appopriate rotina:
switch (Fase) {
caso 0: Lo (); break; caso 1: Mid () break; caso 2: Oi () break; caso: Mensagem ("Estado inválido!");
}
Nested Switch
Condicional switch declarações podem ser aninhados - rótulos caso e padrão são, então, atribuído ao mais profundo que encerram switch declaração.
Iteração Demonstrações (Loops)
instruções de iteração de loop permite um conjunto de instruções. Há três formas de iter- demonstrações ração na mikroC PRO para PIC:
enquanto fazer para
Enquanto a Declaração
A enquanto palavra-chave é usado para iterar condicionalmente um comunicado. A sintaxe da enquanto afirmação é:
enquanto (Expressão) instrução
A declaração executa repetidamente até que o valor de expressão é falsa. O teste ocorre antes declaração é executado. Assim, se expressão avalia a falsa
224
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
na primeira passagem, o loop não é executado. Note que os parênteses em torno de expres- Sion são obrigatórios.
Aqui está um exemplo de cálculo do produto escalar de dois vetores, usando o enquanto declaração:
int s = 0, i = 0; enquanto (I <n) {
s + = a [i] * b [i]; i + +;
}
Note que o corpo do laço pode ser nulo declaração. Por exemplo:
enquanto (Q * + + * p = + +);
Do Declaração
A fazer instrução é executada até que a condição se torne falsa. A sintaxe da fazer afirmação é:
fazer declaração enquanto (Expressão);
A declaração é executado repetidamente enquanto o valor de expressão permanece diferente de zero. A expressão é avaliada após cada iteração, portanto, o loop será executado declaração de pelo menos uma vez.
Parênteses em torno expressão são obrigatórios.
Note que não é a estrutura de controle apenas em C, que expressamente termina com ponto e vírgula (;). Outras estruturas com controlo final declaração, o que significa que eles implicitamente incluir um ponto e vírgula ou chave de fechamento.
Aqui está um exemplo de cálculo do produto escalar de dois vetores, usando o fazer Estado mento:
s = 0, i = 0; fazer {
s + = a [i] * b [i]; i + +;
} enquanto (I <n);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
225
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Para a declaração
A para declaração implementa um loop iterativo. A sintaxe da para declaração é o seguinte:
para
(Expressão [init];
Expressão [condição];
incremento [expres-
] Sion) declaração
Antes da primeira iteração do loop, init-expressão define as variáveis de partida para do loop. Você não pode passar em declarações init-expressão.
condição de expressão é verificada antes da da primeira entrada do bloco; declaração é executado repetidamente até que o valor de condição de expressão é falsa. Depois cada iteração do loop, expressão de incremento incrementos de um contador de loop. Con- Consequentemente, i + + é funcionalmente o mesmo que + + I.
Todas as expressões são opcionais. Se condição de expressão é deixado de fora, é assumido que ser sempre verdadeira. Assim, "Vazio" para afirmação é comumente usado para criar um fim- menos loop em C:
para (;) Declaração
A única maneira de quebrar este ciclo é por meio do quebrar declaração.
Aqui está um exemplo de cálculo do produto escalar de dois vetores, usando o para Estado mento:
para (S = 0, i = 0; i <n, i + +) s + = a [i] * b [i];
Não existe outra maneira de fazer isso:
para (S = 0, i = 0; i n <; s + = a [i] * b [i], i + +);
/ * Válido, mas
* Feio /
mas é considerado um estilo de programação ruim. Embora legal, o cálculo do montante não deve ser uma parte da expressão de incremento, porque não está em o serviço da rotina de loop. Note que a declaração nula (;) é usado para o corpo do laço.
226
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Ir Demonstrações
A instrução de salto, quando executado, transfere o controle incondicionalmente. Há quatro tais declarações no mikroC PRO para PIC:
quebrar continuar goto retorno
Break e continue
Ruptura de Declaração
Às vezes é necessário parar o loop dentro de seu corpo. Use o quebrar declaração dentro de loops para passar o controle para a primeira instrução seguinte ao interior switch, para, ao mesmo tempo, ou fazer bloco.
quebrar é comumente utilizada na switch instruções para impedir a sua execução sobre o resultado positivo em primeiro lugar. Por exemplo:
switch (Estado) {
caso 0: Lo (); break; caso 1: Mid (); break; caso 2: Oi (); break; default: Mensagem ("Estado inválido!");
}
Continuar a Declaração
A continuar declaração no prazo de malhas é usada para "Ignorar a ciclo ". Ele passa o controle ao fim do fim mais profundo que encerram cinta pertencente a uma construção de loop. Em que ponto a condição de continuação do laço é reavaliada. Isso significa que conti- ue exige a próxima iteração se a continuação do laço condição for verdadeira.
Especificamente, o continuar declaração dentro do loop vai saltar para a posição marcada- ção, uma vez que é mostrada abaixo: enquanto (..) { ... if (> val 0) continue; ... / / Continue saltos aqui }
fazer { ... if (> val 0) continuar; ... / / Continue saltos aqui enquanto (..);
para (..;..;..) { ... if (> val 0) continue; ... / / Continue saltos aqui }
Mikroelektronika - Soluções de software e hardware para o mundo embutido
227
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Goto Declaração
A goto declaração é usada para salto incondicional para um rótulo local - para mais infor- informações nos rótulos, se referem a declarações identificadas. A sintaxe da goto afirmação é:
goto label_identifier;
Isto irá transferir o controle para a localização de um selo local especificado pelo label_identi- Fier. A label_identifier tem que ser um nome da etiqueta na mesma fun- ção em que o goto declaração é. A linha goto pode vir antes ou depois do rótulo.
goto é usado para sair de qualquer nível das estruturas de controle aninhadas, mas ele não pode ser usado para pular em um bloco, enquanto saltando inicializações que bloco- por exemplo, salta- ção no corpo do laço, etc
O uso de goto declaração é geralmente desencorajado, pois praticamente todos os algoritmo pode ser realizado sem ele, resultando em programas estruturados legíveis. Uma possível aplicação da goto afirmação é sair de estruturas de controle aninhadas profundamente:
para (...) {
para (...) { ...
se (Desastre) goto Erro; ... }
} . . .
Erro: / * erro * código de tratamento /
Instrução Return
A retorno declaração é usada para sair da função atual de volta para o chamado rotina, opcionalmente retornar um valor. A sintaxe é:
retorno [Expressão];
Isto irá avaliar expressão e retornar o resultado. valor retornado será auto- automaticamente convertidos para o tipo de função esperado, se necessário. A expressão é opcional, se omitido, a função retornará um valor aleatório da memória.
Nota: A declaração retorno em funções do vazio tipo não pode ter expres- Sion - na verdade, a retorno declaração pode ser omitido por completo, se é o último estado- mento no corpo da função.
228
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Declarações compostas (blocos)
A instrução composta, ou bloco, é uma lista (possivelmente vazia) de declarações em anexo em chaves correspondentes {}. Sintaticamente, o bloco pode ser considerado como um único declaração, mas também desempenha um papel no escopo de identificadores. Um identificador declarado dentro do bloco tem um alcance a partir do ponto da declaração e termina no chave de fechamento. Os blocos podem ser aninhados em qualquer profundidade até aos limites da memória.
Por exemplo, o para loop espera uma declaração em seu corpo, para que possamos passar um instrução composta:
para (I = 0; i <n, i + +) {
int temp = a [i]; a [i] = b [i]; b [i] = temp;
}
Note que, ao contrário de outras declarações, instruções compostas não terminam com ponto e vírgula (;), Ou seja, nunca há um ponto e vírgula após o chave de fechamento.
PreProcessor
Pré-processador é um processador de texto integrado que prepara o código fonte para compilação. Preprocessor permite:
- A inserção de texto de um arquivo specifed até um certo ponto no código (veja o arquivo de inclusão), - Substituição específicas símbolos lexical com outros símbolos (veja Macros), - Compilação condicional que condicionalmente inclui ou omite partes do código (ver Compilação Condicional).
Note que o pré-processador de texto analisa a nível simbólico, não a nível de carácter individual. Preprocessor é controlado por meio de directivas de pré-processamento e de pré-processamento operadores.
Preprocessor directivas
Toda a linha no código-fonte com um líder # é tida como um pré-processamento directiva (Ou linha de controlo), a menos # está dentro de uma seqüência literal, em um caráter permanente, ou incorporado em um comentário. A inicial # pode ser precedido ou seguido de um espaço (excluindo novas linhas).
A directiva nula consiste de uma linha contendo o caractere único #. Esta linha é sempre ignorados.
directivas Preprocessor são geralmente colocados no início do código-fonte, mas
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido 229www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
eles podem aparecer legalmente em qualquer ponto do programa. A mikroC PRO para PIC pré- directivas de pré-processamento do processador detecta e analisa as fichas embutido elas. A directiva está em vigor a partir de sua declaração até o final do arquivo do programa.
Aqui está uma directiva comumente utilizados:
# Include <math.h>
Para mais informações sobre arquivos, incluindo com o # Include directiva, se referem ao arquivo Inclusão.
A mikroC PRO para PIC suporta directivas de pré-processamento padrão:
# (Directiva null) # Define # Elif # Else # Endif # Erro
# If # Ifdef # Ifndef # Include # Line # Undef
Nota: Por enquanto pragma Funcall só é suportada.
Continuação de linha com contrabarra (\)
Para quebrar directiva em várias linhas terminar a linha com uma barra invertida (\):
# Define MACRO
Esta directiva continua a \ a linha a seguir.
230
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Macros
As macros fornecem um mecanismo de substituição do token, antes da compilação, com ou sem um conjunto de formal, os parâmetros de função semelhante.
Definindo macros e Expansões Macro
A # Define directiva define uma macro:
# Define macro_identifier <token_sequence>
Cada ocorrência de macro_identifier no código fonte a seguir esta linha de controle ser substituído na posição original com o possivelmente vazio token_sequence (Há algumas exceções, que são discutidos mais tarde). Essas substituições são conhecidos como macro expansions.token_sequence às vezes é chamado o corpo de uma macro. Um token vazio seqüência de resultados na remoção de cada macro afetados identificador a partir do código fonte.
Nenhum ponto e vírgula (;) é necessário para finalizar uma directiva de pré-processamento. Qualquer personagem encontrado na seqüência token, incluindo vírgulas, aparecerá em uma expansão de macro- sion.token_sequence termina no encoun primeira linha não barra invertida novo registado. Qualquer seqüência de espaços, incluindo comentários na seqüência token, é substituído por um caractere de espaço único.
Depois de cada indivíduo expansão macro, uma nova verificação é feita do recém-expandido texto. Isso permite a possibilidade de utilizar macros aninhados: o texto expandido pode conter identificadores de macro que estão sujeitos à substituição. No entanto, se a macro se expande em algo que se parece com uma directiva de pré-processamento, directiva, tal não será reco- cida pelo pré-processador. Todas as ocorrências do macro identificador encontrado dentro literal cordas, constantes de caracteres, ou comentários no código-fonte não será ampliada.
A macro não será expandido durante sua expansão (assim # Define macro macro não irá expandir-se indefinidamente). Aqui está um exemplo:
/ * Aqui estão algumas macros simples: * / # Define err_msg "Fora do alcance!" # Define EVERLOOP para (;) / * Que nós poderíamos usar assim: * / main () {
EVERLOOP { ... se (Erro) {Lcd_Out_Cp (err_msg); break;} ...
} }
Mikroele
www.mecatronicadegaragem.blogspot.com
ktronika - Soluções de software e hardware para o mundo embutido 231
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
A tentativa de redefinir uma macro já está definido identificador resultará em uma advertência a menos que uma nova definição é exatamente a mesma definição de token-a-símbolo como o actual um. A estratégia preferida quando as definições podem existir em outros arquivos de cabeçalho é tão seguinte forma:
# Ifndef BLOCK_SIZE
# Define BLOCK_SIZE 512 # Endif
A linha média é ignorada se BLOCK_SIZE está definido, se BLOCK_SIZE é atualmente não definidos, a linha do meio é chamado para defini-lo.
Macros com parâmetros
A sintaxe a seguir é usada para definir uma macro com parâmetros:
# Define macro_identifier (<arg_list>) <token_sequence>
Note que não pode haver espaço em branco entre macro_identifier e "(". A opcional arg_list é uma seqüência de identificadores separados por vírgulas, como os argu- lista desenvolvimento de uma função C. Cada vírgula delimitado identificador tem o papel de um formal argumento ou espaço reservado.
Tais macros são chamados por escrito
macro_identifier (<actual_arg_list>)
no código-fonte subseqüentes. A sintaxe é idêntica à de uma chamada de função; na verdade, muitos biblioteca padrão C "Funções" são implementadas como macros. No entanto, existem algumas importantes diferenças semânticas.
O opcional actual_arg_list deve conter o mesmo número de delimitar-vírgula ed seqüências token, conhecido como argumentos reais, como os encontrados na arg_list formal de o # Define linha - deve haver um argumento real para cada argumento formal. Um erro será relatado se o número de argumentos em duas listas não é a mesma.
Uma macro resultados põem em dois conjuntos de substituições. Primeiro, o macro eo identificador argumentos parêntese fechado é substituída pela seqüência de token. Em seguida, qualquer for- argumentos mal que ocorre na seqüência de token são substituídos pelos correspondentes argumentos reais constantes actual_arg_list. Tal como com simples definições de macro, rescanning ocorre para detectar quaisquer identificadores macro incorporada elegíveis para a expansão.
Aqui está um exemplo simples:
www.mecatronicadegaragem.blogspot.com
/ * Um macro simples que retorna maior de seus 2 argumentos: * /
232 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Idioma Referência
# Define _MAX (A, B) ((A)> (B))? (A): (B)
/ * Vamos chamá-lo: * / _MAX x = (a + b, c + d);
/ * Pré-processador irá transformar a linha anterior para: x = ((a + b)> (c + d))? (A + b) (c + d) * /
É muito recomenda-se colocar parênteses em torno de cada argumento na macro corpo a fim de evitar possíveis problemas com a precedência do operador.
Indefinida Macros
A # Undef diretiva é usada remover a definição de uma macro.
# Undef macro_identifier
A directiva # Undef separa qualquer seqüência anterior token macro_identi- fier, a definição de macro foi esquecido, e macro_identifier é indefinido. Nenhuma expansão macro ocorre dentro do # Undef linhas.
O estado de ser definido ou indefinido é uma propriedade importante de um identificador independentemente da definição atual. A # Ifdef e # Ifndef directivas condicionais, usado para testar se qualquer identificador está definido ou não, oferecer um mecanismo flexível de nismos para controlar vários aspectos de uma compilação.
Depois de um macro identificador foi definido, ele pode ser redefinido com # Define, utilizando a seqüência igual ou diferente do token.
Inclusão de arquivos
A directiva de pré-processamento # Include puxa arquivos de cabeçalho (extensão. h) no código-fonte. Não confie na pré-processador para incluir os arquivos fonte (extensão) - veja Adicionar / Remover arquivos do projeto para obter mais informações.
A sintaxe da # Include directiva tem dois formatos:
# Include <header_name> # Include "header_name"
O pré-processador elimina a # Include linha e substitui-lo com todo o texto um arquivo de cabeçalho em que ponto do código-fonte. A colocação de # Include não pode- portanto influenciar o alcance ea duração de qualquer identificadores no arquivo incluído.
A diferença entre estes dois formatos reside na busca algoritmo empregado no
Mikroelektronika - Soluções de software e hardware para o mundo embutido
233
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
tentar localizar o arquivo de inclusão.
Se o # Include diretiva é usada com o <header_name> versão, a pesquisa é feitas sucessivamente em cada um dos seguintes locais, nesta ordem:
1. o mikroC PRO para PIC pasta de instalação > "Incluir" pasta 2. usuário personalizada caminhos de pesquisa
A "Header_name" especifica uma versão fornecida pelo usuário incluem arquivos, o mikroC PRO para o PIC irá procurar o arquivo de cabeçalho nas seguintes posições, nesta ordem:
1. o pasta do projeto (pasta que contém o arquivo de projeto . Mcppi) 2. PRO o mikroC para PIC pasta de instalação > "Incluir" pasta 3. usuário personalizada caminhos de pesquisa
Caminho explícito
Ao colocar um caminho explícito em header_name, somente esse diretório será pesquisado. Para exemplo:
# Include "C: \ my_files \ test.h"
Nota
Há também uma terceira versão do # Include directiva, raramente usado, o que pressupõe que nem < nem " aparecer como o primeiro caractere não-branco seguinte # Include:
# Include macro_identifier
É assume que a definição de macro que irá expandir macro identificador em um válido nome do cabeçalho delimitada com um <header_name> ou "Header_name" formatos existe.
234
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
Preprocessor Operadores
A # (Sinal de libra) é uma diretiva de pré-processamento quando ele ocorre como o primeiro não-branco caractere de espaço em uma linha. Além disso, # e # # proceder à substituição do operador e merg- ção durante a fase de pré-processamento de digitalização.
Operador #
No pré-processador C, uma sequência de caracteres entre aspas é considerado um símbolo e seu conteúdo não é analisada. Isto significa que os nomes de macro dentro de aspas não são expandida.
Se você precisa de um argumento real (a seqüência exata de caracteres entre aspas), como resultado da pré-processamento, use o # operador no corpo da macro. Ele pode ser colocado em frente de um argumento formal na definição de macro para converter o argumento real para após uma seqüência de substituição.
Por exemplo, vamos ter macro LCD_PRINT para imprimir nome da variável e valor em LCD:
# Define LCD_PRINT (val) Lcd_Custom_Out_Cp (# val ":"); \
Lcd_Custom_Out_Cp (IntToStr (val));
Agora, o código a seguir,
LCD_PRINT (temp)
será pré-processada para isso:
Lcd_Custom_Out_Cp ("temp": "); Lcd_Custom_Out_Cp (IntToStr (temp));
Operador # #
Operador # # é usado para colagem token. Dois símbolos podem ser colada (fundidas), juntamente colocando # # entre eles (mais branco opcional em ambos os lados). Os pré- processador remove espaços em branco e # #, Combinando as fichas separadas em uma nova token. Isto é comumente usado para a construção de identificadores.
Por exemplo, veja a definição de macro SPLICE para a colagem de dois símbolos em um identificador:
# Define SPLICE (x, y) x _ # # # # y
Agora, a chamada SPLICE (cnt, 2) irá se expandir para o identificador cnt_2.
Mikroelektro
www.mecatronicadegaragem.blogspot.com
nika - Software e hardware SOLUÇÕES PARA mundo embutido 235
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
Nota
A mikroC PRO para PIC não suporta o método mais antigo nonportable de token colar com (L / ** / r).
Compilação condicional
directivas de compilação condicional são normalmente utilizados para fazer programas de fonte fácil à mudança e fácil de compilar em ambientes de execução diferentes. O mikroC PRO para o PIC suporta compilação condicional, substituindo a fonte apropriada- linhas de código com uma linha em branco.
Todas as diretivas de compilação condicional deve ser concluída na fonte ou no arquivo de inclusão em que eles começaram.
Directivas # if, # elif, # else e # endif
O condicional directivas # If, # elif, # else, e # Endif trabalho muito semelhante ao comum demonstrações C condicional. Se a expressão que você escreve depois # If tem uma valor diferente de zero, o grupo logo após a linha # If directiva é retida na a unidade de tradução.
A sintaxe é:
# If constant_expression_1 <section_1>
[# Elif constant_expression_2 <section_2>]
... [# Elif constant_expression_n <section_n>]
[# Else <final_section>]
# Endif
Cada # If directiva em um arquivo de origem devem ser acompanhados por um fechamento # Endif directiva. Qualquer número de # Elif directivas podem aparecer entre # If e # Endif directivas, mas no máximo um # Else directiva é permitido. A # Else directiva, se houver, deve ser o Directiva com a última antes # Endif.
seções pode ser qualquer texto do programa que tem significado para o compilador ou pré-processamento. O pré-processador seleciona uma única seção, através da avaliação constant_expression fol-
236
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
tes cada # If ou # Elif directiva até que encontre um verdadeiro (diferente de zero), expressão constante- Sion. As expressões constantes estão sujeitas a expansão de macro.
Se todas as ocorrências da expressão constante são falsas, ou se não # Elif directivas aparecem, o pré-processador selecciona o bloco de texto após o # Else cláusula. Se o # Else cláusula é omitido e todas as instâncias do constant_expression na # If bloco são falsas, não seção é selecionados para posterior processamento.
Qualquer seção processados podem conter cláusulas adicionais condicional, aninhados em qualquer profundidade. Cada aninhadas # Else, # elif, ou # Endif directiva pertence a mais próxima da anterior o # If directiva.
O resultado líquido da situação anterior é que o código apenas uma seção (Possivelmente vazia) será compilado.
Directivas # ifdef e # ifndef
A # Ifdef e # Ifndef diretrizes podem ser usadas em qualquer lugar # If podem ser utilizados e eles podem testar se um identificador é actualmente definida ou não. A linha
# Ifdef identificador
tem exatamente o mesmo efeito que # Se um se identificador está definido e as mesmo efeito que # Se 0 se identificador é atualmente indefinida. A outra directiva, # Ifndef, verdadeiros testes para o"Não definida" condição, produzir o resultado oposto.
A sintaxe que se segue depois da # If, # elif, # else, e # Endif.
Um identificador definido como NULL é considerada como definida.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
237
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6 Referência da Linguagem mikroC PRO para PIC
238
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
7
mikroC PRO para PIC Bibliotecas
mikroC PRO para PIC prevê um conjunto de bibliotecas que simplificam a inicialização e uso de microcontroladores PIC complacente e seus módulos:
Utilize o Gestor de Biblioteca para incluir mikroC PRO para PIC Bibliotecas em seu projeto.
239
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Bibliotecas Hardware PIC-específicas
- Biblioteca ADC - CAN Biblioteca - Biblioteca CANSPI - Biblioteca Compact Flash - EEPROM Biblioteca - Ethernet PIC18FxxJ60 Biblioteca - Biblioteca Memória Flash - Biblioteca LCD Gráfico - Biblioteca I2C - Teclado Biblioteca - Biblioteca LCD - Biblioteca de código Manchester - Libray Muliti Media Card - OneWire Biblioteca - Biblioteca Expander Porto - Imprimir Biblioteca - PS / 2 Biblioteca - PWM Biblioteca - RS-485 Biblioteca - Software Biblioteca I2C - Biblioteca SPI Software - Biblioteca UART Software - Biblioteca de Som - Biblioteca SPI - Biblioteca Ethernet SPI - Biblioteca Gráfica SPI LCD - Biblioteca SPI LCD - SPI LCD8 Biblioteca - SPI Biblioteca Gráfica T6963C LCD - Biblioteca Gráfica T6963C LCD - UART Biblioteca - Biblioteca USB HID
Padrão ANSI C Bibliotecas
mikroC PRO para PIC
- ANSI - ANSI - ANSI - ANSI
C C C C
Ctype Biblioteca Biblioteca de Matemática Stdlib Biblioteca String Biblioteca
Diversos Bibliotecas
- Biblioteca Button - Conversões Biblioteca - Sprint Biblioteca - Setjmp Biblioteca - Time Library - Trigonometria Biblioteca
Veja também incorporada nas rotinas.
240
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
BIBLIOTECA DEPENDENCIES Alguns usam bibliotecas (depende) função e / ou variáveis, con- balcões de definidos em outras bibliotecas. Imagem abaixo mostra claramente repre- sentação sobre essas dependências CIES.
Por exemplo, usa SPI_Glcd Glcd_Fonts e Port_Expander biblioteca que usa uma biblioteca SPI. Isto significa que se você verificar SPI_Glcd biblioteca em Manag-Biblioteca er, todas as bibliotecas de que ela depende serão verificados também.
Informações relacionadas: gerente de Biblioteca, PIC Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
241
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
HARDWARE BIBLIOTECAS - Biblioteca ADC - CAN Biblioteca - Biblioteca CANSPI - Biblioteca Compact Flash - EEPROM Biblioteca - Ethernet PIC18FxxJ60 Biblioteca - Biblioteca Memória Flash - Biblioteca LCD Gráfico - Eu ˛ Biblioteca C - Biblioteca do teclado - Biblioteca Lcd - Biblioteca de código Manchester - Biblioteca Multi Media Card - OneWire Biblioteca - Biblioteca Expander Porto - Imprimir Biblioteca - PS / 2 Biblioteca - PWM Biblioteca - RS-485 Biblioteca - Software I Biblioteca C ˛ - Biblioteca SPI Software - Biblioteca UART Software - Biblioteca de Som - Biblioteca SPI - Biblioteca Ethernet SPI - Biblioteca Gráfica SPI Lcd - Biblioteca SPI Lcd - SPI Lcd8 Biblioteca - SPI Biblioteca Gráfica T6963C Lcd - Biblioteca Gráfica T6963C Lcd - UART Biblioteca - Biblioteca USB HID
mikroC PRO para PIC
242
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo não assinado ADC_Read (unsigned short canal);
Retorna 10-bit sem assinatura valor lido do canal especificado.
Descrição
Inicializa módulo PIC ADC interno para trabalhar com clock RC. Relógio determina o período de tempo necessário para a realização de conversão AD (min 12TAD).
Parâmetro canal representa o canal a partir do qual o valor analógico é a adquiridos. Consulte a ficha técnica apropriada para o canal-a-pino de
t Requer Nada.
Exemplo não assinado tmp; ... tmp = ADC_Read (2); / / Ler o valor analógico do canal 2
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
ADC BIBLIOTECA
ADC (Conversor Analógico Digital) módulo está disponível com um número de modelos PIC MCU. Biblioteca função ADC_Read é incluído para oferecer-lhe confortáveis trabalhar com o módulo.
ADC_Read
Exemplo Biblioteca
Este exemplo de código lê o valor analógico do canal 2 e apresenta-lo no PORTB e PORTC.
unsigned int temp_res;
vazio main () { ANSEL = 0x04; TRISA = 0xFF; ANSELH = 0; TRISC = 0x3F; TRISB = 0;
fazer {
/ / / / / / / / / /
Configure o pino AN2 como analógico PORTA de entrada é Configure outras AN pinos como I / O digital Pins RC7, RC6 são saídas PORTB é a saída
}
temp_res = ADC_Read (2); PORTB = temp_res; PORTC temp_res => 2;
} while (1);
/ / Obter os resultados de 10 bits da conversão AD / / Envia abaixo de 8 bits a PORTB / / Envia 2 bits mais significativos a RC7, RC6
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
243
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Conexão HW
ADC conexão HW CAN BIBLIOTECA mikroC PRO para PIC fornece uma biblioteca (driver) para trabalhar com o módulo CAN. CAN é um protocolo muito robusto que a detecção de erros e de sinalização, de auto- e confinamento de falhas. dados defeituoso pode e quadros remotas são re-transmitidos auto- automaticamente, semelhante ao da Ethernet. taxas de transferência de dados variam de até 1 Mbit / s em distâncias de 40m de rede abaixo de 250 Kbit / s em 250 cabos, e pode ir ainda mais baixo em distâncias maiores da rede, para baixo a 200Kbit / s, que é o bitrate mínimo definido pela norma. Cabos utilizados são pares de fios trançados, e comprimento máximo do cabo é de 1000m. CAN suporta dois formatos de mensagens:
formato padrão, com 11 bits identificador, e Extended format, com 29 bits identificador
Nota: CAN Biblioteca é apoiada apenas por MCUs com o módulo CAN. Nota: Consultar o padrão CAN CAN sobre a resistência de terminação de barramento.
244
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANSetOperationMode (unsigned short modo, unsigned short wait_flag);
Retorna Nada.
Descrição
Define CAN para o modo solicitado, ou seja, cópias Modo para CANSTAT. modo Parâmetros deve ser um dos CAN_OP_MODE constantes (ver constantes CAN).
Parâmetro wait_flag deve ser 0 ou 0xFF:
Se definido como 0xFF, esta é uma chamada de bloqueio - a função não será
"Retorno" até o modo solicitado está definido. Se for 0, esta é uma chamada sem bloqueio. Ele não verifica se o módulo CAN é
t d
Requer
rotinas CAN atualmente suportado apenas por P18XXX8 microcontroladores PIC. Microregulador Troller deve ser conectado ao CAN transceptor (MCP2551 ou similares), que é
d b CAN Exemplo CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF);
CAPÍTULO 7
mikroC PRO para PIC
Rotinas da biblioteca
CANSetOperationMode CANGetOperationMode CANInitialize CANSetBaudRate CANSetMask CANSetFilter CanRead CanWrite
rotinas a seguir são para uso interno, compilador só:
RegsToCANID CANIDToRegs
Certifique-se de verificar as constantes podem necessário para utilizar algumas das funções.
CANSetOperationMode
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
245
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANInitialize (char SJW, BRP char, char PHSEG1, char PHSEG2, char PROPSEG, char CAN_CONFIG_FLAGS);
Retorna Nada.
Descrição
Inicializa CAN. Todas as transmissões pendentes são abortadas. Configura máscara de todos os registra a 0 para permitir que todas as mensagens. O modo de configuração é definido internamente por essa função. Após uma execu- ção deste modo de funcionamento normal é definido. registros de filtro são definidas de acordo com o valor de bandeira:
se (CAN_CONFIG_FLAGS & _CAN_CONFIG_VALID_XTD_MSG! = 0) / / Defina todos os filtros para XTD_MSG
else if (Config e _CAN_CONFIG_VALID_STD_MSG! = 0) / / Defina todos os filtros para STD_MSG
mais / / Definir a metade dos filtros para DST, eo restante para XTD_MSG
Parâmetros: SJW tal como definido no 18XXX8 datasheet (1-4) BRP tal como definido no 18XXX8 datasheet (1-64) PHSEG1 tal como definido no 18XXX8 datasheet (1-8)
t l d fi id 18XXX8 d t h t (1 8)
Requer
rotinas podem atualmente apoiada apenas por P18XXX8 MCUs PIC. Microregulador Troller deve ser conectado ao CAN transceptor (MCP2551 ou similares), que é con-
Exemplo
init = & _CAN_CONFIG_SAMPLE_THRICE _CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF;
... CANInitialize (1, 1, 3, 3, 1, o init) / / inicializar CAN
Protótipo unsigned short CANGetOperationMode ();
Retorna opmode atual.
Descrição função retorna modo de operação atual do módulo CAN.
Requer rotinas podem atualmente suportado apenas por P18XXX8 microcontroladores PIC. Microregulador Troller deve ser conectado ao CAN transceptor (MCP2551 ou similares), que é
Exemplo se (CANGetOperationMode () == _CAN_MODE_NORMAL) {... };
CAPÍTULO 7 Bibliotecas
CANGetOperationMode
CANInitialize
mikroC PRO para PIC
246
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANSetBaudRate (char SJW, char BRP, char PHSEG1, char PHSEG2, char PROPSEG, char CAN_CONFIG_FLAGS);
Retorna Nada.
Descrição
Define CAN taxa de transmissão. Devido à complexidade do protocolo CAN, você não pode
simplesmente vigor um valor de bps. Em vez disso, use esta função quando CAN está em modo de configuração. Consulte datasheet para mais detalhes.
Parâmetros:
SJW tal como definido no 18XXX8 datasheet (1-4) BRP tal como definido no 18XXX8 folha (1-64) PHSEG1 tal como definido no 18XXX8 datasheet (1-8) PHSEG2 tal como definido no 18XXX8 datasheet (1-8)
l d fi id 18XXX8 d h (1 8) Requer
CAN deve ser na configuração modo, caso contrário, a função será ignorado. rotinas podem atualmente suportado apenas por P18XXX8 microcontroladores PIC. Microregulador Troller deve ser conectado ao CAN transceptor (MCP2551 ou similares), que é con-
Exemplo
init = _CAN_CONFIG_SAMPLE_THRICE & _CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF;
... CANSetBaudRate (1, 1, 3, 3, 1, o init);
CAPÍTULO 7
mikroC PRO para PIC
CANSetBoudRate
Bibliotecas
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
247
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANSetFilter (char CAN_FILTER, tempo valor, char CAN_CONFIG_FLAGS);
Retorna Nada.
Descrição
Função define a máscara de filtragem avançada de mensagens. Dado valor é um pouco ajustar- ed aos registos máscara apropriada buffer.
Parâmetros:
CAN_MASK é um dos valores predefinidos constante (ver constantes CAN) valor é a máscara de registrar o valor CAN_CONFIG_FLAGS seleciona o tipo de mensagem para filtrar, quer
Requer CAN deve estar em modo de configuração; caso contrário, a função será ignorada. rotinas podem atualmente suportado apenas por P18XXX8 microcontroladores PIC.
Exemplo / / Seta todos os bits de máscara para 1, ou seja, todos os bits filtrados são relevantes:
CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); / / Observe que -1 é apenas uma maneira mais barata de escrever 0xFFFFFFFF.
Complemento irá fazer o truque e encha-o com os entes.
Protótipo vazio CANSetFilter (char CAN_FILTER, tempo valor, char CAN_CONFIG_FLAGS);
Retorna Nada.
Descrição
Função define filtro de mensagens. Dado valor é um pouco ajustado para tampão apropriado registros de máscara.
Parâmetros:
CAN_FILTER é um dos valores predefinidos constante (ver constantes CAN) valor é o filtro registrar o valor CAN_CONFIG_FLAGS seleciona o tipo de mensagem para filtrar, quer
Requer
CAN deve estar em modo de configuração, caso contrário, a função será ignorado. rotinas podem atualmente suportado apenas por P18XXX8 PIC MCUs. Microcontrolador deve
Exemplo / / Set id B1_F1 filtro para 3:
CANSetFilter (_CAN_FILTER_B1_F1, 3, _CAN_CONFIG_XTD_MSG);
CAPÍTULO 7 Bibliotecas
CANSetMask
CANSetFilter
mikroC PRO para PIC
248
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short CanWrite (long id, char * dados, char datalen, char CAN_TX_MSG_FLAGS);
Retorna Retorna zero se a mensagem não pode ser na fila (buffer cheio).
Descrição
Se pelo menos um buffer de transmissão vazia é encontrada, a função envia mensagem sobre fila para a transmissão. Se o buffer está cheio, a função retorna 0. Parâmetros:
id é a mensagem CAN identificador. Apenas 11 ou 29 bits podem ser usadas dependendo tipo de mensagem (padrão ou estendida) dados é matriz de bytes até 8 bytes de comprimento
é i d d d 1 8 Requer
CAN deve estar no modo Normal. rotinas podem atualmente suportado apenas por P18XXX8 microcontroladores PIC. Microcontrolador deve ser li d CAN t t (MCP2551 i il ) é t d b t CAN
Exemplo
char tx, dados; tempo id; / / ... tx = & _CAN_TX_PRIORITY_0
_CAN_TX_XTD_FRAME; / / ... CanWrite (id, dados, 2, TX);
Protótipo char CanRead (long * Id, char * dados, char * Datalen, char CAN_RX_MSG_FLAGS *);
Retorna Mensagem do buffer de recepção ou zero se nenhuma mensagem de encontrado.
Descrição
Função lê mensagem do buffer de recebimento. Se pelo menos um buffer cheio receber for encontrada, ela é extraídos e retornado. Se nenhum encontrada, a função retorna zero. Parâmetros:
id é a mensagem identificador dados é um array de bytes até 8 bytes de comprimento
é i t d d d 1 8 Requer
CAN deve estar no modo em que a recepção é possível. rotinas podem atualmente apoiada apenas por P18XXX8 MCUs PIC. Microcontrolador deve ser ligado ao CAN transceptor (MCP2551 ou similar) que é conectado ao barramento CAN.
Exemplo
char VN, rx, len, dados [8]; tempo id; / / ... rx = 0; / / ... VN = CanRead (id, dados, len rx);
CAPÍTULO 7
mikroC PRO para PIC
CanRead
CanWrite
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
249
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
CAN Constantes Há um número de constantes predefinidas na biblioteca da CAN. Para poder usar o biblioteca de forma eficaz, você precisa estar familiarizado com estes. Você pode querer verificar a exemplo, no final do capítulo. CAN_OP_MODE
CAN_OP_MODE
constantes definem operação pode
modo.
Função
CANSetOperationMode espera que um dos estas como seu argumento:
const char _CAN_MODE_BITS _CAN_MODE_NORMAL _CAN_MODE_SLEEP _CAN_MODE_LOOP _CAN_MODE_LISTEN _CAN_MODE_CONFIG
= = = =
= =
0xE0, 0x00, 0x20, 0x40, 0x60, 0x80;
/ / Utilize esta opção para acesso opmode bits
CAN_CONFIG_FLAGS
CAN_CONFIG_FLAGS constantes definem bandeiras relacionadas com a configuração do módulo CAN. Funções CANInitialize e CANSetBaudRate esperar que um deles (ou um bit a bit combinação), como seu argumento:
const char
_CAN_CONFIG_DEFAULT
_CAN_CONFIG_PHSEG2_PRG_BIT _CAN_CONFIG_PHSEG2_PRG_ON _CAN_CONFIG_PHSEG2_PRG_OFF
= 0xFF,
= 0x01, = 0xFF, = 0xFE,
/ / 11111111 / / XXXXXXX1 / / XXXXXXX0
_CAN_CONFIG_LINE_FILTER_BIT = 0x02, _CAN_CONFIG_LINE_FILTER_ON = 0xFF, _CAN_CONFIG_LINE_FILTER_OFF = 0xFD,
/ XXXXXX1X / / XXXXXX0X /
_CAN_CONFIG_SAMPLE_BIT
= 0x04,
_CAN_CONFIG_SAMPLE_ONCE _CAN_CONFIG_SAMPLE_THRICE
_CAN_CONFIG_MSG_TYPE_BIT _CAN_CONFIG_STD_MSG _CAN_CONFIG_XTD_MSG
_CAN_CONFIG_DBL_BUFFER_BIT _CAN_CONFIG_DBL_BUFFER_ON _CAN_CONFIG_DBL_BUFFER_OFF
= 0xFF, = 0xFB,
= 0x08, = 0xFF, = 0xF7,
= 0x10, = 0xFF, = 0xEF,
/ XXXXX1XX / / XXXXX0XX / / XXXX1XXX / / XXXX0XXX / / XXX1XXXX / / XXX0XXXX /
250
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC _CAN_CONFIG_MSG_BITS
= 0x60,
Bibliotecas
_CAN_CONFIG_ALL_MSG _CAN_CONFIG_VALID_XTD_MSG _CAN_CONFIG_VALID_STD_MSG _CAN_CONFIG_ALL_VALID_MSG
= 0xFF, = 0xDF, = 0xBF, = 0x9F;
/ X11XXXXX / / X10XXXXX / / X01XXXXX / / X00XXXXX /
Você pode usar AND bit a bit (&) para formar config byte fora desses valores. Por exemplo:
init = & _CAN_CONFIG_SAMPLE_THRICE
_CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF;
... CANInitialize (1, 1, 3, 3, 1, o init); / / Inicializa CAN
CAN_TX_MSG_FLAGS
CAN_TX_MSG_FLAGS estão relacionadas com bandeiras transmissão de uma mensagem CAN:
const char
_CAN_TX_PRIORITY_BITS = 0x03, _CAN_TX_PRIORITY_0 _CAN_TX_PRIORITY_1 _CAN_TX_PRIORITY_2 _CAN_TX_PRIORITY_3
= = = =
0xFC, 0xFD, 0xFE, 0xFF,
/ / / / / / / /
XXXXXX00 XXXXXX01 XXXXXX10 XXXXXX11
_CAN_TX_FRAME_BIT
= 0x08,
_CAN_TX_STD_FRAME _CAN_TX_XTD_FRAME
= 0xFF, = 0xF7,
/ / XXXXX1XX / XXXXX0XX /
_CAN_TX_RTR_BIT = 0x40, _CAN_TX_NO_RTR_FRAME = 0xFF, _CAN_TX_RTR_FRAME = 0xBF;
/ X1XXXXXX / / X0XXXXXX /
Você pode usar AND bit a bit (&) para ajustar os sinalizadores apropriados. Por exemplo:
/ Valor / formulário para ser usado com CANSendMessage: send_config _CAN_TX_PRIORITY_0 = &
_CAN_TX_XTD_FRAME & _CAN_TX_NO_RTR_FRAME;
... CANSendMessage (id, dados, 1, send_config);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
251
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
CAN_RX_MSG_FLAGS CAN_RX_MSG_FLAGS são flags relacionados com a recepção da mensagem CAN. Se um bit especial é definido; cor- responder significado é TRUE ou então ele será FALSE. const char
_CAN_RX_FILTER_BITS _CAN_RX_FILTER_1 _CAN_RX_FILTER_2 _CAN_RX_FILTER_3 _CAN_RX_FILTER_4 _CAN_RX_FILTER_5 _CAN_RX_FILTER_6 _CAN_RX_OVERFLOW _CAN_RX_INVALID_MSG _CAN_RX_XTD_FRAME _CAN_RX_RTR_FRAME _CAN_RX_DBL_BUFFERED
= = = = = = = = = = =
=
0x07 / Uso / este acesso bits filtro 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, / / Defina se Overflowed mais limpo 0x10, / / Define se inválido mais limpo 0x20, / / Define se a mensagem XTD mais limpo 0x40, / / Define se a mensagem RTR mais limpo 0x80 / / Define se a mensagem foi rígido
ware buffer duplo
Você pode usar AND bit a bit (&) para ajustar os sinalizadores apropriados. Por exemplo:
se (MsgFlag & _CAN_RX_OVERFLOW! = 0) { ... / / Receptor estouro ocorreu. / / Nós perdemos a nossa mensagem anterior.
}
CAN_MASK
CAN_MASK constantes definem códigos máscara. Função CANSetMask espera que um dos estas como seu argumento:
# const char
_CAN_MASK_B1 = 0, _CAN_MASK_B2 = 1;
CAN_FILTER
CAN_FILTER constantes definir códigos de filtro. Função CANSetFilter espera uma destas como sua argumento:
const char
_CAN_FILTER_B1_F1 _CAN_FILTER_B1_F2 _CAN_FILTER_B2_F1 _CAN_FILTER_B2_F2
= = = =
0; 1, 2, 3 º,
252
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
_CAN_FILTER_B2_F3 = 4, _CAN_FILTER_B2_F4 = 5;
Exemplo Biblioteca
Esta é uma simples demonstração de CAN Biblioteca rotinas de uso. Primeiro nó inicia a comunicação com o segundo nó, enviando alguns dados para o seu endereço. A segundo nó responde enviando de volta os dados incrementado em 1. Primeiro nó em seguida faz o mesmo e envia os dados incrementado de volta para o segundo nó, etc Código para o nó CAN primeiro:
unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags / / pode bandeiras unsigned char Rx_Data_Len / / recebidos comprimento de dados em bytes char RxTx_Data [8] / / pode rx / tx buffer de dados char Msg_Rcvd; Sinalizador / recepção / const longo ID_1st = 12111, ID_2nd = 3; IDs / node / tempo Rx_ID;
vazio main () {
PORTC = 0; TRISC = 0;
Can_Init_Flags = 0; Can_Send_Flags = 0; Can_Rcv_Flags = 0;
PORTC / claro / / Configura como PORTC saída
/ / / / Bandeiras claras / /
Can_Send_Flags = & _CAN_TX_PRIORITY_0 / valor / formulário a ser utilizado
_CAN_TX_XTD_FRAME E / com CanWrite _CAN_TX_NO_RTR_FRAME;
Can_Init_Flags _CAN_CONFIG_SAMPLE_THRICE = &
_CAN_CONFIG_PHSEG2_PRG_ON &
/ Valor / formulário a ser utilizado / / Com CANInit
_CAN_CONFIG_XTD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG;
CANInitialize (1,3,3,3,1, Can_Init_Flags); / / Inicializa o módulo CAN CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF); / / modo de configuração definidas CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); / mask1 definir todos os bits para os CANSetMask (_CAN_MASK_B2, -1, _CAN_CONFIG_XTD_MSG); / mask2 definir todos os bits para os CANSetFilter (_CAN_FILTER_B2_F4, ID_2nd, _CAN_CONFIG_XTD_MSG); / / set id B2_F4 filtro para segundo nó ID
CANSetOperationMode (_CAN_MODE_NORMAL, 0xFF);
/ / Definir o modo normal
RxTx_Data [0] = 9;
/ / conjunto de dados inicial a ser enviada
Mikroelektronika - Soluções de software e hardware para o mundo embutido 253
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
CanWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); / / envia mensagem inicial while (1) {/ / faz um loop infinito Msg_Rcvd CanRead = (& Rx_ID, RxTx_Data & Rx_Data_Len & Can_Rcv_Flags); / /
receber mensagem se ((Rx_ID == ID_2nd) & & Msg_Rcvd) {/ / se a mensagem recebida de seleção ID
PORTC RxTx_Data = [0] / / id de saída de dados, corrigir a PORTC RxTx_Data [0] + +; / / incrementa os dados recebidos
Delay_ms (10); CanWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); / / incrementado enviar dados de volta
} }
}
Código para o nó CAN segundo: unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags / / pode bandeiras unsigned char Rx_Data_Len / / recebidos comprimento de dados em bytes char RxTx_Data [8] / / pode rx / tx buffer de dados char Msg_Rcvd; sinalizador / recepção / const longo ID_1st = 12111, ID_2nd = 3; / node / Identificações tempo Rx_ID;
vazio main () {
PORTC = 0; TRISC = 0;
Can_Init_Flags = 0; Can_Send_Flags = 0; Can_Rcv_Flags = 0;
PORTC / claro / / Set PORTC como saída
/ / / / Bandeiras claras / /
Can_Send_Flags = & _CAN_TX_PRIORITY_0 / valor / formulário a ser utilizado
_CAN_TX_XTD_FRAME E / com CanWrite _CAN_TX_NO_RTR_FRAME;
Can_Init_Flags = & _CAN_CONFIG_SAMPLE_THRICE / valor / formulário a ser utilizado
_CAN_CONFIG_PHSEG2_PRG_ON E / com CANInit _CAN_CONFIG_XTD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG &
CANInitialize (1,3,3,3,1, Can_Init_Flags); / / inicializa o módulo CAN externa CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF); / / modo de configuração definidas CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); / / configura todos mask1
bits para os
254
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
CANSetMask (_CAN_MASK_B2, -1, _CAN_CONFIG_XTD_MSG); / / configura todos mask2 bits para os
CANSetFilter (_CAN_FILTER_B2_F3, ID_1st, _CAN_CONFIG_XTD_MSG); / set / ID da B2_F3 filtro para 1 nó ID
CANSetOperationMode (_CAN_MODE_NORMAL, 0xFF); / / o modo NORMAL
enquanto (1) {/ / faz um loop infinito
Msg_Rcvd CanRead = (& Rx_ID, RxTx_Data & Rx_Data_Len, & Can_Rcv_Flags); / receber mensagens
se ((Rx_ID == ID_1st) & & Msg_Rcvd) {/ / se a mensagem recebida de seleção ID PORTC RxTx_Data = [0]; / / id corrigir os dados, a produção a PORTC RxTx_Data [0] + +; / / incrementa os dados recebidos CanWrite (ID_2nd, RxTx_Data, 1, Can_Send_Flags); / / envia incre-
dados documentados de volta }
}
Conexão HW
Exemplo de interface CAN transceptor com MCU e ônibus
Mikroelektronika - Soluções de software e hardware para o mundo embutido
255
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis deve ser definida na todos
projetos usando CANSPI
Descrição: Exemplo:
sbit sfr extern CanSpi_CS;
Chip linha Select. sbit CanSpi_CS em RC0_bit;
sbit sfr extern CanSpi_Rst;
linha de reposição. sbit CanSpi_Rst em RC2_bit;
sbit sfr extern CanSpi_CS_Direction;
Direção do Chip Selecione pino.
sbit CanSpi_CS_Direction em TRISC0_bit;
sbit sfr extern CanSpi_Rst_Direction;
Direção do pino de Reset. sbit CanSpi_Rst_Direction em TRISC2_bit;
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
CANSPI BIBLIOTECA O módulo SPI está disponível com uma série de microcontroladores PIC compatível. O mikroC PRO para PIC oferece uma biblioteca (driver) para trabalhar com CANSPI mikroElektronika's Placas de expansão (com ou MCP2515 MCP2510) via interface SPI. O CAN é um protocolo muito robusto que a detecção de erros e sinalização, de auto-verificação e confinamento de falhas. dados defeituoso pode e quadros remoto são re- transmitidas automaticamente, semelhante ao Ethernet. taxas de transferência de dados dependem da distância. Por exemplo, 1 Mbit / s pode ser obtida em net- comprimentos de trabalho abaixo de 40m, enquanto 250 Kbit / s pode ser obtida em comprimentos de rede abaixo 250m. Quanto maior a distância menor bitrate máximo que pode ser alcançado. O menor bitrate definido pelo padrão é 200Kbit / s. Os cabos utilizados são pares de fios trançados. CAN suporta dois formatos de mensagens:
formato padrão, com 11 bits de identificador e Extensão formato, com 29 bits identificador.
Nota:
Consulte a norma CAN CAN sobre a resistência de terminação de ônibus. Uma velocidade de comunicação eficaz CANSPI depende SPI e, certamente, é mais lento do que "Real" CAN. A biblioteca utiliza o módulo de comunicação SPI. O usuário deve inicializar SPI módulo antes de usar o SPI LCD Gráfico Biblioteca. Para MCUs com dois módulos SPI é possível inicializar ambos e, em seguida, switch usando o SPI_Set_Active () rotina. CANSPI módulo refere-se a CANSPI mikroElektronika do Add-on board conectado ao módulo SPI de MCU.
das dependências externas de CANSPI Biblioteca
256
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Rotinas da biblioteca
Bibliotecas
- - - - - - - -
CANSPISetOperationMode CANSPIGetOperationMode CANSPIInitialize CANSPISetBaudRate CANSPISetMask CANSPISetFilter CANSPIread CANSPIWrite
As rotinas a seguir são para um uso interno da biblioteca, apenas:
- RegsToCANSPIID - CANSPIIDToRegs
Certifique-se de verificar constantes CANSPI necessário para utilizar algumas das funções.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
257
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANSPISetOperationMode (char modo, char WAIT);
Retorna Nada.
Descrição
Define o módulo CANSPI para o modo solicitado.
Parâmetros:
- modo: CANSPI modo de operação do módulo. Valores válidos: CANSPI_OP_MODE con- balcões de (ver constantes CANSPI). - ESPERA: CANSPI modo de comutação pedido de verificação. Se WAIT == 0, a chamada não é bloqueio. A função não verifica se o módulo está ligado a CANSPI solicitadas modo ou não. Chamador deve usar CANSPIGetOperationMode para verificar a cor- modo de operação rect antes da operação de modo a realização específica. Se AGUARDE! = 0, o
Requer
As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra Câmara ou h d lh t V j l d ã t i f i d t á i
Exemplo / / Configurar o módulo CANSPI no modo de configuração (aguardar dentro CANSPISetOperationMode até este modo estiver definido) CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF);
Protótipo char CANSPIGetOperationMode ();
Retorna modo de operação atual.
Descrição A função retorna o modo de operação atual do módulo CANSPI. Confira CAN- SPI_OP_MODE constantes (ver constantes CANSPI) ou folha de dados do dispositivo para ópera Modo de códigos ção
Requer A rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra Câmara ou hardware semelhante Veja o exemplo de conexão na parte inferior desta página
Exemplo
/ / Verifica se o módulo CANSPI está no modo normal e se é fazer alguma coisa. if (CANSPIGetOperationMode () == _CANSPI_MODE_NORMAL) {
... }
CAPÍTULO 7 Bibliotecas
CANSPISetOperationMode
CANSPIGetOperationMode
mikroC PRO para PIC
258
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANSPIInitialize ( char SJW, char BRP, char PHSEG1, char PHSEG2, char PROPSEG, char CANSPI_CONFIG_FLAGS);
Retorna Nada.
Descrição
Inicializa o módulo CANSPI. Stand-Alone controlador CAN no módulo CANSPI é definido como:
- Desabilite pode capturar - Continuar a CAN operação em modo de Espera - Não interromper as transmissões pendentes - Fcan relógio: 4 * Países Terceiros (FOSC) - Taxa de transmissão é definida de acordo com determinados parâmetros - Modo CAN: Normal - Filtro e as identificações de registros máscara são definidos como zero - Filtro e uma máscara tipo de estrutura da mensagem é definido de acordo com CAN_CONFIG_FLAGS valor
SAM, SEG2PHTS, WAKFIL e DBEN bits são definidos de acordo toCANSPI_CONFIG_FLAGS valor.
Parâmetros:
- SJW conforme definido na ficha técnica do controlador CAN - BRP conforme definido na ficha técnica do controlador CAN - PHSEG1 tal como definido no controlador CAN datasheet - PHSEG2 conforme definido na ficha técnica do controlador CAN - PROPSEG conforme definido na ficha técnica do controlador CAN - CAN_CONFIG_FLAGS é formado a partir de constantes predefinidas (ver CANSPI con- balcões de)
Requer
As variáveis globais:
- CanSpi_CS: Chip Selecionar linha - CanSpi_Rst: linha de reset - CanSpi_CS_Direction: Direção do pino de Chip Select - CanSpi_Rst_Direction: Direção do pino de Reset devem ser definidas antes de utilizar esta função.
As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. O SPI módulo precisa ser inicializado. Veja o SPI1_Init e SPI1_Init_Advanced rotinas. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra Câmara ou sim- homólogos de hardware. Veja o exemplo de conexão na parte inferior desta
CAPÍTULO 7
mikroC PRO para PIC
CANSPIInitialize
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
259
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
/ / Conexões CANSPI módulo
mikroC PRO para PIC
sbit CanSpi_CS em RC0_bit; sbit CanSpi_CS_Direction em TRISC0_bit; sbit CanSpi_Rst em RC2_bit; sbit CanSpi_Rst_Direction em TRISC2_bit; / / Fim conexões CANSPI módulo
/ / Inicializa o módulo CANSPI com a taxa de transmissão e bandeiras de aceitação de mensagens, juntamente com as regras de amostragem char CanSPi_Init_Flags;
Exemplo ... CanSPi_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE e / form /
valor a ser utilizado _CANSPI_CONFIG_PHSEG2_PRG_ON & / / Com
CANSPIInitialize _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG;
... SPI1_Init (); / / inicializa o módulo SPI CANSPIInitialize (1,3,3,3,1, CanSpi_Init_Flags); / / inicializa
CANSPI módulo externo
260
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANSPISetBaudRate ( char SJW, char BRP, char PHSEG1, char PHSEG2, char PROPSEG, char CANSPI_CONFIG_FLAGS);
Retorna Nada.
Descrição
Define a taxa de CANSPI módulo de transmissão. Devido à complexidade do
protocolo CAN, você não pode simplesmente forçar um valor bps. Em vez disso, use esta função quando o CANSPI módulo está em modo de configuração.
SAM, SEG2PHTS e WAKFIL bits são definidos de acordo com CANSPI_CONFIG_FLAGS
valor. Consulte a ficha técnica para mais detalhes.
Parâmetros:
- SJW como definidos na ficha técnica do controlador CAN - BRP conforme definido na ficha técnica do controlador CAN - PHSEG1 conforme definido na ficha técnica do controlador CAN - PHSEG2 conforme definido na ficha técnica do controlador CAN f d fi id fi h té i d t l d CAN
Requer
O módulo CANSPI deve estar no modo de configuração, caso contrário, a função será ignorados. Veja CANSPISetOperationMode.
As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI.
MCU tem para ser conectado corretamente mikroElektronika de CANSPI Extra
Exemplo
/ / Necessário definir taxa de transmissão e regras de amostragem char canspi_config_flags; ... CANSPISetOperationMode (CANSPI_MODE_CONFIG, 0xFF); / CONFIGURAÇÃO / set- Modo de ração (CANSPI mastro módulo de estar em modo de configuração para a taxa de transmissão configurações) canspi_config_flags = & _CANSPI_CONFIG_SAMPLE_THRICE
_CANSPI_CONFIG_PHSEG2_PRG_ON & _CANSPI_CONFIG_STD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF;
CANSPISetBaudRate (1, 1, 3, 3, 1, canspi_config_flags);
CAPÍTULO 7
mikroC PRO para PIC
CANSPISetBaudRate
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
261
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANSPISetMask (char CANSPI_MASK, tempo val, char CANSPI_CON- FIG_FLAGS);
Retorna Nada.
Descrição
Configura uma máscara de filtragem avançada de mensagens. O parâmetro valor é pouco ajustadas aos registos máscara apropriada.
Parâmetros:
- CAN_MASK: CANSPI número de máscara de módulo. Valores válidos: CANSPI_MASK costants (Ver constantes CANSPI)
- máscara de valor do registo: val - CAN_CONFIG_FLAGS: seleciona o tipo de mensagem para filtrar. Valores válidos:
CANSPI_CONFIG_ALL_VALID_MSG, CANSPI_CONFIG_MATCH_MSG_TYPE e CANSPI_CONFIG_STD_MSG, CANSPI_CONFIG_MATCH_MSG_TYPE e CANSPI_CONFIG_XTD_MSG.
(Ver constantes CANSPI)
Requer
O módulo CANSPI deve estar no modo de configuração, caso contrário, a função será ignorados. Veja CANSPISetOperationMode.
As rotinas são suportados CANSPI apenas por MCUs com o módulo SPI.
MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra
Exemplo
/ / Definir a máscara de filtro adequado e valor tipo de mensagem CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); / / Modo conjunto de configurações (módulo CANSPI deve estar no modo de config para as configurações de máscara)
/ / Set B1 todos os bits de máscara a 1 (todos os bits são filtrados relevante): / / Observe que -1 é apenas uma maneira mais barata de escrever 0xFFFFFFFF. / / Complemento irá fazer o truque e encha-o com os entes. CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_MATCH_MSG_TYPE & _CANSPI_CONFIG_XTD_MSG);
CAPÍTULO 7 Bibliotecas
CANSPISetMask
mikroC PRO para PIC
262
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio CANSPISetFilter (char CANSPI_FILTER, tempo val, char CANSPI_CONFIG_FLAGS);
Retorna Nada.
Descrição
Configura a mensagem de filtro. O parâmetro valor é pouco adaptado ao dis- comeu registros filtro.
Parâmetros:
- CAN_FILTER: módulo de filtro CANSPI número. Valores válidos: CANSPI_FILTER constantes (ver constantes CANSPI)
- valor do registro do filtro: val - CAN_CONFIG_FLAGS: seleciona o tipo de mensagem para filtrar. Valores válidos:
CANSPI_CONFIG_ALL_VALID_MSG, CANSPI_CONFIG_MATCH_MSG_TYPE e CANSPI_CONFIG_STD_MSG, CANSPI_CONFIG_MATCH_MSG_TYPE e CANSPI_CONFIG_XTD_MSG.
(Ver constantes CANSPI)
Requer
O módulo CANSPI deve estar no modo de configuração, caso contrário, a função
será ignorados. Veja CANSPISetOperationMode.
As rotinas CANSPI são suportados apenas pelo MCUs com o SPI módulo.
MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra
Exemplo
/ / Definir o valor do filtro adequado e tipo de mensagem CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); / / Modo conjunto de configurações (módulo CANSPI deve estar no modo de config para as definições do filtro)
/ * Defina id B1_F1 filtro para 3: * / CANSPISetFilter (_CANSPI_FILTER_B1_F1, 3, _CANSPI_CONFIG_XTD_MSG);
CAPÍTULO 7
mikroC PRO para PIC
CANSPISetFilter
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
263
www.mecatronicadegaragem.blogspot.com
Protótipo char CANSPIRead (long * Id, char * Rd_data, char * Data_len, char CANSPI_RX_MSG_FLAGS *);
Retorna - 0 se nada for recebido - 0xFF se um dos buffers de recepção está cheio (mensagem recebidos)
Descrição
Se pelo menos um buffer de recebimento integral for encontrado, ele será processado nas seguintes maneira:
- ID da mensagem é recuperada e armazenada na localização fornecidas pela id
parâmetro - Mensagem dados são recuperados e armazenados em um buffer fornecido pelo o rd_data parâmetro - Tamanho da mensagem é recuperada e armazenada a localização fornecida pela data_len parâmetro
- Mensagem bandeiras são recuperados e armazenados para a localização fornecida pela CAN_RX_MSG_FLAGS parâmetro
Requer
O módulo CANSPI deve estar em um modo no qual é possível receber. Veja CANSPISetOperationMode.
As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI.
MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra
Câmara ou
Exemplo
/ / Verificação o módulo CANSPI para mensagens recebidas. Se algum foi receberam fazer alguma coisa. char msg_rcvd, rx_flags, data_len; char dados [8]; tempo msg_id; ... CANSPISetOperationMode (CA_NSPI_MODE_NORMAL, 0xFF); / / Definir o modo normal (módulo CANSPI deve estar no modo em que receber é possível) ... rx_flags = 0; / / Limpa bandeiras de mensagem if (= msg_rcvd CANSPIRead (msg_id, dados data_len, rx_flags)) {
... }
CAPÍTULO 7 Bibliotecas
CANSPIRead
mikroC PRO para PIC
264
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo char CANSPIWrite (long id, char * Wr_data, char data_len, char CAN- SPI_TX_MSG_FLAGS);
Retorna - 0 Se todos os buffers de transmissão estão ocupados - 0xFF se pelo menos um buffer de transmissão está disponível
Descrição
Se pelo menos um vazio buffer de transmissão for encontrado, a função envia mensagem em fila para a transmissão.
Parâmetros:
- id: identificador de mensagem CAN. Valores válidos: 11 ou 29 valores
pouco, dependendo de tipo de mensagem (padrão ou estendida)
Requer
O módulo CANSPI deve estar no modo em que a transmissão seja possível. Veja CANSPISetOperationMode.
As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI.
MCU tem de ser devidamente conectado ao mikroElektronika de CANSPI Extra
Câmara ou
Exemplo
/ / Envia mensagem prorrogado mensagem CAN com a identificação adequada e dados char tx_flags; char dados [8]; tempo msg_id; ... CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); / / Definir o modo normal (CANSPI deve estar no modo em que a transmissão é possível)
tx_flags = _CANSPI_TX_PRIORITY_0 & _CANSPI_TX_XTD_FRAME; / / Mensagem de flags CANSPIWrite (msg_id, dados, 2, tx_flags);
CAPÍTULO 7
mikroC PRO para PIC
CANSPIWrite
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
265
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
CANSPI Constantes Há um número de constantes predefinidas na biblioteca CANSPI. Você precisa ser familiarizado com eles, a fim de ser capaz de usar a biblioteca eficazmente. Check-exame plo, no final do capítulo. CANSPI_OP_MODE A CANSPI_OP_MODE CANSPI constantes definem o modo de operação. Função CANSPISetOperationMode espera uma destas como é argumento: const char
_CANSPI_MODE_BITS _CANSPI_MODE_NORMAL _CANSPI_MODE_SLEEP _CANSPI_MODE_LOOP _CANSPI_MODE_LISTEN _CANSPI_MODE_CONFIG
= 0xE0, = 0x00, = 0x20, = 0x40, = 0x60, = 0x80;
/ / Utilize esta opção para acesso opmode bits
CANSPI_CONFIG_FLAGS
A CANSPI_CONFIG_FLAGS constantes definem bandeiras relacionadas com o módulo CANSPI configuração. As funções CANSPIInitialize, CANSPISetBaudRate, CANSPISetMask e CANSPISetFilter esperar um desses (ou uma combinação bit a bit- ção), como seu argumento:
const char
_CANSPI_CONFIG_DEFAULT
_CANSPI_CONFIG_PHSEG2_PRG_BIT _CANSPI_CONFIG_PHSEG2_PRG_ON _CANSPI_CONFIG_PHSEG2_PRG_OFF
= 0xFF,
= 0x01, = 0xFF, = 0xFE,
/ / 11111111 / / XXXXXXX1 / / XXXXXXX0
_CANSPI_CONFIG_LINE_FILTER_BIT = 0x02, _CANSPI_CONFIG_LINE_FILTER_ON = 0xFF, _CANSPI_CONFIG_LINE_FILTER_OFF = 0xFD,
/ XXXXXX1X / / XXXXXX0X /
_CANSPI_CONFIG_SAMPLE_BIT
= 0x04,
_CANSPI_CONFIG_SAMPLE_ONCE _CANSPI_CONFIG_SAMPLE_THRICE
_CANSPI_CONFIG_MSG_TYPE_BIT _CANSPI_CONFIG_STD_MSG _CANSPI_CONFIG_XTD_MSG
= 0xFF, = 0xFB,
= 0x08, = 0xFF, = 0xF7,
/ XXXXX1XX / / XXXXX0XX / / XXXX1XXX / / XXXX0XXX /
266
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC _CANSPI_CONFIG_DBL_BUFFER_BIT
= 0x10,
Bibliotecas
_CANSPI_CONFIG_DBL_BUFFER_ON _CANSPI_CONFIG_DBL_BUFFER_OFF
_CANSPI_CONFIG_MSG_BITS _CANSPI_CONFIG_ALL_MSG _CANSPI_CONFIG_VALID_XTD_MSG _CANSPI_CONFIG_VALID_STD_MSG _CANSPI_CONFIG_ALL_VALID_MSG
= 0xFF, = 0xEF,
= 0x60, = 0xFF, = 0xDF, = 0xBF, = 0x9F;
/ XXX1XXXX / / XXX0XXXX / / X11XXXXX / / X10XXXXX / / X01XXXXX / / X00XXXXX /
Você pode usar AND bit a bit (&) para formar config byte fora desses valores. Por exemplo:
init = & _CANSPI_CONFIG_SAMPLE_THRICE
_CANSPI_CONFIG_PHSEG2_PRG_ON & _CANSPI_CONFIG_STD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF;
... CANSPIInitialize (1, 1, 3, 3, 1, o init); / / Inicializa CANSPI
CANSPI_TX_MSG_FLAGS
CANSPI_TX_MSG_FLAGS são flags relacionados com a transmissão de uma mensagem CAN:
const char
_CANSPI_TX_PRIORITY_BITS = 0x03, _CANSPI_TX_PRIORITY_0 _CANSPI_TX_PRIORITY_1 _CANSPI_TX_PRIORITY_2 _CANSPI_TX_PRIORITY_3
= = = =
0xFC, 0xFD, 0xFE, 0xFF,
/ / / / / / / /
XXXXXX00 XXXXXX01 XXXXXX10 XXXXXX11
_CANSPI_TX_FRAME_BIT
= 0x08,
_CANSPI_TX_STD_FRAME _CANSPI_TX_XTD_FRAME
= 0xFF, = 0xF7,
/ XXXXX1XX / / XXXXX0XX /
_CANSPI_TX_RTR_BIT = 0x40, _CANSPI_TX_NO_RTR_FRAME = 0xFF, _CANSPI_TX_RTR_FRAME = 0xBF;
/ X1XXXXXX / / X0XXXXXX /
Você pode usar AND bit a bit (&) para ajustar os sinalizadores apropriados. Por exemplo:
/ * Valor de forma a ser usado como sinalizador de mensagem de envio: * / send_config = _CANSPI_TX_PRIORITY_0 &
_CANSPI_TX_XTD_FRAME & _CANSPI_TX_NO_RTR_FRAME;
... CANSPIWrite (id, dados, 1, send_config);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
267
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
CANSPI_RX_MSG_FLAGS CANSPI_RX_MSG_FLAGS são flags relacionados com a recepção da mensagem CAN. Se um particu- bit lar estiver definido, então correspondente significado é TRUE ou então ele será FALSE. const char
_CANSPI_RX_FILTER_BITS _CANSPI_RX_FILTER_1 _CANSPI_RX_FILTER_2 _CANSPI_RX_FILTER_3 _CANSPI_RX_FILTER_4 _CANSPI_RX_FILTER_5 _CANSPI_RX_FILTER_6
= = = = = = =
0x07, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
/ / Utilize esta opção para filtrar o acesso bits
_CANSPI_RX_OVERFLOW = 0x08 / / Defina se Overflowed mais limpo _CANSPI_RX_INVALID_MSG = 0x10, / / Define se inválido mais limpo _CANSPI_RX_XTD_FRAME = 0x20 / / mensagem Defina se XTD mais
apuradas _CANSPI_RX_RTR_FRAME = 0x40 / / mensagem Defina se RTR mais
apuradas _CANSPI_RX_DBL_BUFFERED = 0x80 / / Define se a mensagem foi difícil
ware buffer duplo
Você pode usar AND bit a bit (&) para ajustar o sinalizadores apropriados. Por exemplo:
se (MsgFlag & _CANSPI_RX_OVERFLOW! = 0) { ... / / Receptor estouro ocorreu. / / Nós perdemos a nossa mensagem anterior.
}
CANSPI_MASK
A CANSPI_MASK constantes definem códigos máscara. Função CANSPISetMask espera um desses como é argumento:
const char
_CANSPI_MASK_B1 = 0, _CANSPI_MASK_B2 = 1;
CANSPI_FILTER
A CANSPI_FILTER constantes definir códigos de filtro. Funções CANSPISetFilter espera que um destes, como é o argumento:
const char
_CANSPI_FILTER_B1_F1 _CANSPI_FILTER_B1_F2 _CANSPI_FILTER_B2_F1 _CANSPI_FILTER_B2_F2
= = = =
0; 1, 2, 3 º,
268
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
_CANSPI_FILTER_B2_F3 = 4, _CANSPI_FILTER_B2_F4 = 5;
Exemplo Biblioteca
Esta é uma simples demonstração de CANSPI Biblioteca de rotinas de utilização. Primeiro nó ini- Ates a comunicação com o segundo nó, enviando alguns dados para o seu endereço. O segundo nó responde enviando de volta os dados incrementado em 1. Primeiro nó em seguida, faz o mesmo e envia os dados de volta para incrementado segundo nó, etc
Código para o nó CANSPI primeiro:
unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags / / pode bandeiras unsigned char Rx_Data_Len / / recebidos comprimento de dados em bytes char RxTx_Data [8] / / pode rx / tx buffer de dados char Msg_Rcvd / / pavilhão de recepção const longo ID_1st = 12111, ID_2nd = 3; IDs / node / tempo Rx_ID;
/ / Conexões CANSPI módulo sbit CanSpi_CS sbit CanSpi_CS_Direction sbit CanSpi_Rst
em em em
RC0_bit; TRISC0_bit; RC2_bit;
sbit CanSpi_Rst_Direction em TRISC2_bit; / / Fim conexões CANSPI módulo
vazio main () {
ANSEL = 0; ANSELH = 0;
PORTB = 0; TRISB = 0;
Can_Init_Flags = 0; Can_Send_Flags = 0; Can_Rcv_Flags = 0;
/ / Configurar um pinos como I / O digital / PORTB / clear / PORTB set / como saída
/ / / / Bandeiras claras / /
Can_Send_Flags = & _CANSPI_TX_PRIORITY_0 / valor / form a ser usado
_CANSPI_TX_XTD_FRAME E / com CANSPIWrite _CANSPI_TX_NO_RTR_FRAME;
Can_Init_Flags = & _CANSPI_CONFIG_SAMPLE_THRICE / valor / Formulário a ser utilizado
_CANSPI_CONFIG_PHSEG2_PRG_ON E / com CANSPIInit _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON &
_CANSPI_CONFIG_VALID_XTD_MSG;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
269
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
SPI1_Init ();
/ / inicializar o módulo SPI1
mikroC PRO para PIC
CANSPIInitialize (1,3,3,3,1, Can_Init_Flags); / / Inicializar CANSPI externa
módulo CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); / / modo de configuração definidas CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG); / / set
todos mask1 bits para os CANSPISetMask (_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG); / / set
todos mask2 bits para os
CANSPISetFilter (_CANSPI_FILTER_B2_F4, ID_2nd, _CANSPI_CONFIG_XTD_MSG); / / Set id B2_F4 de filtro para segundo nó ID
CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); / / o modo NORMAL
RxTx_Data [0] = 9;
/ / Conjunto de dados inicial a ser enviada
CANSPIWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); / / envia inicial
Mensagem
while (1) {/ / faz um loop infinito
Msg_Rcvd CANSPIRead = (& Rx_ID, RxTx_Data & Rx_Data_Len, & Can_Rcv_Flags); / receber mensagens
se ((Rx_ID == ID_2nd) & & Msg_Rcvd) { / / Mensagem se cheque recebido id
PORTB RxTx_Data = [0]; / / Id saída de dados, corrigir a PORTC
RxTx_Data [0] + +; / / Incremento de dados recebidos
Delay_ms (10); CANSPIWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags);
/ / Incrementado enviar dados de volta }
} }
270
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Código para o nó CANSPI segundo:
unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags / / pode bandeiras unsigned char Rx_Data_Len / / recebidos comprimento de dados em bytes char RxTx_Data [8] / / pode rx / tx de dados buffer char Msg_Rcvd; sinalizador / recepção / const longo ID_1st = 12111, ID_2nd = 3; IDs / node / tempo Rx_ID;
/ / Conexões CANSPI módulo sbit CanSpi_CS sbit CanSpi_CS_Direction sbit CanSpi_Rst
em em em
RC0_bit; TRISC0_bit; RC2_bit;
sbit CanSpi_Rst_Direction em TRISC2_bit; / / Fim conexões CANSPI módulo
vazio main () {
ANSEL = 0; ANSELH = 0;
PORTB = 0; TRISB = 0;
Can_Init_Flags = 0; Can_Send_Flags = 0; Can_Rcv_Flags = 0;
/ / Configurar um pinos como I / O digital / PORTB / clear / PORTB set / como saída
/ / / / Bandeiras claras / /
Can_Send_Flags _CANSPI_TX_PRIORITY_0 = & / Valor / formulário a ser utilizado
_CANSPI_TX_XTD_FRAME E / com CANSPIWrite _CANSPI_TX_NO_RTR_FRAME;
Can_Init_Flags = & _CANSPI_CONFIG_SAMPLE_THRICE / valor / Formulário a ser utilizado
_CANSPI_CONFIG_PHSEG2_PRG_ON E / com CANSPIInit _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF;
SPI1_Init ();
/ / Inicializa SPI1 módulo
CANSPIInitialize (1,3,3,3,1, Can_Init_Flags); / / Inicializa externa
módulo CANSPI CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); / CONFIGURAÇÃO / set-
Modo de Ração CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG); / / set
todos mask1 bits para os CANSPISetMask (_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG); / / set
Mikroelektronika - Soluções de software e hardware para o mundo embutido
271
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
todos mask2 bits para os CANSPISetFilter (_CANSPI_FILTER_B2_F3, ID_1st, _CANSPI_CONFIG_XTD_MSG); / / Configura id do B2_F3 filtro para 1 ID do nó
CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); / / o modo NORMAL
enquanto (1) {/ / faz um loop infinito
Msg_Rcvd CANSPIRead = (& Rx_ID, RxTx_Data & Rx_Data_Len, & Can_Rcv_Flags); / receber mensagens
se ((Rx_ID == ID_1st) & & Msg_Rcvd) {/ / se a mensagem recebida de seleção ID PORTB = RxTx_Data [0] / / id de saída de dados, corrigir a PORTC RxTx_Data [0] + +; / / incrementa os dados recebidos
CANSPIWrite (ID_2nd, RxTx_Data, 1, Can_Send_Flags); / / envia dados incrementado de volta
} }
} Conexão HW Exemplo de interface CAN MCP2510 transceptor com MCU via interface SPI
272
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
COMPACT FLASH BIBLIOTECA
O Compact Flash Biblioteca fornece rotinas para acessar dados em Compact Flash cartão (abrev. CF ainda no texto). Os cartões CF são amplamente utilizados elementos de memória, com- comumente usados com câmeras digitais. Grande capacidade e tempo de acesso excelente de apenas alguns microssegundos torná-los muito atrativos para aplicações de microcontroladores.
No cartão CF, os dados são divididos em setores. Um setor compreende geralmente 512 bytes. Rotinas para manipulação de arquivos, o Cf_Fat rotinas, não são executadas diretamente, mas su- sivamente através 512B buffer.
Nota: As rotinas para manipulação de arquivos só podem ser utilizados com sistema de arquivos FAT16.
Nota: As funções Biblioteca criar e ler arquivos no diretório raiz só.
Nota: As funções Biblioteca preencher ambas as tabelas e FAT1 FAT2 ao escrever em arquivos, mas o arquivo de dados está sendo leitura da tabela FAT1 só, ou seja, não há recuperação, se a tabela FAT1 fica corrompido.
Nota: Se o cartão SD / MMC tem Master Boot Record (MBR), a biblioteca funcionará com a primeiro disponível partição (lógica) primário que tem tamanho diferente de zero. Se o MMC / SD placa tem Volume Boot Record (ou seja, há apenas uma partição lógica e não MBR), a biblioteca trabalha com cartão de inteira como uma única partição. Para mais informações sobre MBR, física e unidades lógicas, primário / secundário partições e tabelas de partições, consulte outros recursos, por exemplo, Wikipedia e similares.
Nota: Antes de escrever a operação, certifique-se de não substituir ou setor de inicialização FAT como poderia fazer o seu cartão no PC ou câmera digital ilegível. ferramentas de mapeamento de unidade, como Winhex, pode ser de grande ajuda.
Mikroelektronika - Soluções de soft
www.mecatronicadegaragem.blogspot.com
ware e hardware para o mundo embutido 273
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis deve ser definida em todos os projetos usando Compact Bibli t d Fl h
Descrição: Exemplo:
sfr extern char CF_Data_Port;
Compact Flash Porta de
d d
char CF_Data_Port em PORTD;
sbit sfr extern CF_RDY;
Pronto linha de sinal. sbit CF_RDY em RB7_bit;
sbit sfr extern CF_WE;
Write Enable linha de sinal. sbit CF_WE em RB6_bit;
sbit sfr extern CF_OE;
Habilitar saída de linha do
i l
sbit CF_OE em RB5_bit;
sbit sfr extern CF_CD1;
Chip detecta sinal de linha. sbit CF_CD1 em RB4_bit;
sbit sfr extern CF_CE1;
Chip linha de sinal Enable. sbit CF_CE1 em RB3_bit;
sbit sfr extern CF_A2;
Endereço pino 2. sbit CF_A2 em RB2_bit;
sbit sfr extern CF_A1;
Endereço pino 1. sbit CF_A1 em RB1_bit;
sbit sfr extern CF_A0;
Endereço pino 0. sbit CF_A0 em RB0_bit;
sbit sfr extern CF_RDY_direction;
Direção da o pino Ready. sbit CF_RDY_direc- ção em TRISB7_bit;
sbit sfr extern CF_WE_direction;
Direção do Write Enable alfinete.
sbit CF_WE_direction em TRISB6_bit;
sbit sfr extern CF_OE_direction;
Direção da Saída Habilitar pino.
sbit CF_OE_direction em TRISB5_bit;
sbit sfr extern CF_CD1_direction;
Direção do Chip detecta alfinete.
sbit CF_CD1_direc- ção em TRISB4_bit;
sbit sfr extern CF_CE1_direction;
Direção do Chip Enable alfinete.
sbit CF_CE1_direc- ção em TRISB3_bit;
sbit sfr extern CF_A2_direction;
Direção do endereço 2 alfinete.
sbit CF_A2_direction em TRISB2_bit;
sbit sfr extern CF_A1_direction;
Direção do endereço 1 alfinete.
sbit CF_A1_direction em TRISB1_bit;
sbit sfr extern CF_A0_direction;
Direção do endereço 0 alfinete.
sbit CF_A0_direction em TRISB0_bit;
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
274
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Rotinas da biblioteca
Bibliotecas
- - - - - - - - - -
Cf_Init Cf_Detect Cf_Enable Cf_Disable Cf_Read_Init Cf_Read_Byte Cf_Write_Init Cf_Write_Byte Cf_Read_Sector Cf_Write_Sector
Rotinas para manipulação de arquivos:
- - - - - - - - - - - - -
Cf_Fat_Init Cf_Fat_QuickFormat Cf_Fat_Assign Cf_Fat_Reset Cf_Fat_Read Cf_Fat_Rewrite Cf_Fat_Append Cf_Fat_Delete Cf_Fat_Write Cf_Fat_Set_File_Date Cf_Fat_Get_File_Date Cf_Fat_Get_File_Size Cf_Fat_Get_Swap_File
A rotina a seguir é para o uso interno do compilador apenas:
- Cf_Issue_ID_Command
Mikroelektronika - Soluções de software e hardware para o mundo embutido
275
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Cf_Init ();
Retorna Nada.
Descrição Inicializa as portas de forma adequada para a comunicação com o cartão CF.
Requer
As variáveis globais:
- CF_Data_Port : Compact Flash porta de dados - CF_RDY : Linha de sinal Ready - CF_WE Escrever habilitar a linha de sinal - CF_OE Saída: permitir que o sinal de linha - CF_CD1 : Chip detecta sinal de linha - CF_CE1 : Linha de sinal Enable - CF_A2 : Endereço 2 pinos - CF_A1 : Pino Endereço 1 - CF_A0 : Pino endereço 0 - CF_RDY_direction : Direção do pino Ready - CF_WE_direction : Direção do Write enable pinos - CF_OE_direction : Direção de permitir a saída do pino - CF_CD1_direction : Direção da Chip detecta o pino - CF_CE1_direction : Direção da Chip permitirá pin - CF_A2_direction : Direção do pino de endereço 2 - CF_A1_direction : Direção da Endereço pino 1 - CF_A0_direction : Direção do endereço 0 pin
devem ser definidas antes de utilizar esta função.
Exemplo
/ / Set pinagem compact flash char Cf_Data_Port em PORTD;
sbit CF_RDY em RB7_bit; sbit CF_WE em RB6_bit; sbit CF_OE em RB5_bit; sbit CF_CD1 em RB4_bit; sbit CF_CE1 em RB3_bit; sbit CF_A2 em RB2_bit; sbit CF_A1 em RB1_bit; sbit CF_A0 em RB0_bit;
sbit CF_RDY_direction em TRISB7_bit; sbit CF_WE_direction em TRISB6_bit; sbit CF_OE_direction em TRISB5_bit; sbit CF_CD1_direction em TRISB4_bit; sbit CF_CE1_direction em TRISB3_bit; sbit CF_A2_direction em TRISB2_bit; sbit CF_A1_direction em TRISB1_bit; sbit CF_A0_direction em TRISB0_bit; / / Fim do pinout compact flash ... Cf_Init (); / / inicializa CF
CAPÍTULO 7 Bibliotecas
Cf_Init
mikroC PRO para PIC
276
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Cf_Detect (void);
Retorna - 1 - Se o cartão CF foi detectada - 0 - Caso contrário
Descrição Verifica se há presença de cartão CF, lendo o chip detectar alfinete.
Requer As portas MCU correspondente deverá ser devidamente inicializado para o cartão CF. Veja
Exemplo
/ / Espera até o cartão CF está inserido: fazer nop asm;
enquanto (! Cf_Detect ());
Protótipo vazio Cf_Disable (void);
Retorna Nada.
Descrição Rotina desativa o dispositivo e libera as linhas de dados para outros dispositivos. Para ativar o dispositivo novamente, chame Cf_Enable. Estas duas rotinas em conjunto permitem livre / ocupam linha de dados quando se trabalha com vários dispositivos.
Requer As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja
Exemplo / / Desativar flash compacto
Cf_Disable ();
Protótipo vazio Cf_Enable (void);
Retorna Nada.
Descrição Ativa o dispositivo. Rotina deve ser chamado somente se você tiver desativado o dispositivo por meio da rotina Cf_Disable. Estas duas rotinas em conjunto permitir você livre / ocupam linha de dados quando se trabalha com vários di iti
Requer As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja
Exemplo / / Ativar o flash compacto
Cf_Enable ();
CAPÍTULO 7
mikroC PRO para PIC
Cf_Detect
Cf_Enable
Cf_Disable
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
277
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Cf_Read_Byte (void);
Retorna Retorna um byte lido do buffer sector Compact Flash.
Nota: Superior byte do não assinado valor de retorno está desmarcada.
Descrição Lê um byte de Compact Flash sector Local de buffer atualmente apontado pelos ponteiros internos ler. Estas indicações serão autoicremented da leitura.
Requer As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja Cf_Init.
cartão CF deve ser inicializado para a leitura operação Veja Cf Read Init
Exemplo / / Lê um byte de memória Compact Flash: dados char; ... = dados Cf_Read_Byte ();
Protótipo vazio Cf_Read_Init (unsigned long endereço, unsigned short sector_count);
Retorna Nada.
Descrição
Inicializa cartão CF para leitura.
Parâmetros:
- endereço: o primeiro setor a ser preparado para operação de leitura. - sector_count: número de setores a serem preparados para a leitura de
ã Requer As portas MCU correspondente deverá ser devidamente inicializado para cartão CF.
Veja Cf I i
Exemplo / / Inicializa o flash compacto para a leitura do setor 590 Cf_Read_Init (590, 1);
CAPÍTULO 7 Bibliotecas
Cf_Read_Init
Cf_Read_Byte
mikroC PRO para PIC
278
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Cf_Write_Byte (unsigned short data_);
Retorna Nada.
Descrição
Grava um byte no buffer local Compact Flash sector actualmente apontada pelo escrito ponteiros. Estas indicações serão autoicremented da leitura. Quando buffer sector está cheio, seu conteúdo será transferido para a memória flash apropriado sector.
Parâmetros:
- Data : byte a ser escrito
Requer As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja Cf_Init.
cartão CF deve ser inicializado para escrever a operação Veja Cf Write Init Exemplo
char = dados 0xAA; ... Cf_Write_Byte (dados);
Protótipo vazio Cf_Write_Init (unsigned long endereço, unsigned short sectcnt);
Retorna Nada.
Descrição
Inicializa cartão CF para a escrita.
Parâmetros:
- endereço: o primeiro setor a ser preparado para operação de escrita. - sectcnt: número de setores a serem preparados para a escrita operação.
Requer As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja Cf I i
Exemplo / / Inicializa o flash compacto para escrever para o setor 590 Cf_Write_Init (590, 1);
CAPÍTULO 7
mikroC PRO para PIC
Cf_Write_Init
Cf_Write_Byte
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
279
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Cf_Read_Sector (unsigned long sector_number, unsigned short * Buffer);
Retorna Nada.
Descrição
Lê um setor (512 bytes). Ler dados são armazenados em buffer desde pela buffer parâmetro.
Parâmetros:
sector_number: o setor a ser lido. buffer: buffer de dados de pelo menos 512 bytes de comprimento.
Requer As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja Cf I i
Exemplo / / Ler o setor 22 unsigned short dados [512]; ... Cf_Read_Sector (22, dados);
Protótipo vazio Cf_Write_Sector (unsigned long sector_number, unsigned short * Buffer);
Retorna Nada.
Descrição
Grava 512 bytes de dados fornecidos pelo buffer parâmetro para um sector da CF.
Parâmetros:
- Sector_number: setor a ser escrito. - Buffer: buffer de dados de 512 bytes de comprimento.
Requer As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja
Exemplo / / Escreve para o setor 22 unsigned short dados [512]; ... Cf_Write_Sector (22, dados);
CAPÍTULO 7 Bibliotecas
Cf_Read_Sector
Cf_Write_Sector
mikroC PRO para PIC
280
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char Cf_Fat_QuickFormat (cf_fat_label char *);
Retorna - 0 - Se o cartão CF foi detectado, formatei e inicializado com sucesso - 1 - se o formato FAT16 foi unseccessful - 255 - Caso o cartão não foi detectado
Descrição
Formatos para FAT16 e inicializa o cartão CF.
Parâmetros:
- Cf_fat_label: rótulo de volume (11 caracteres). Se menos de 11 caracteres são prestadas, a etiqueta será preenchido com espaços. Se a string é null passado, o volume não será identificado.
Nota: Esta rotina pode ser utilizado em substituição ou em conjunto com a rotina
Cf_Fat_Init.
Nota: Se o cartão CF já contém um setor de inicialização válido, ela
Requer Nada.
Exemplo //--- Formato e inicializar a biblioteca do FAT - se (! Cf_Fat_QuickFormat (& cf_fat_label)) { ... }
Protótipo unsigned short Cf_Fat_Init ();
Retorna - 0 - Se o cartão CF foi detectado e inicializado com sucesso - 1 - Se o setor de inicialização FAT16 não foi encontrado - 255 - Caso o cartão não foi detectado
Descrição Inicializa cartão CF, lê CF setor de inicialização FAT16 e extrai os dados necessários
Requer Nada.
Exemplo / / Inicia a biblioteca do FAT se (! Cf_Fat_Init ()) {/ / Inicia a biblioteca do FAT ... }
CAPÍTULO 7
mikroC PRO para PIC
Cf_Fat_Init
Cf_Fat_QuickFormat
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
281
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Cf_Fat_Assign (char * Nome do arquivo, char file_cre_attr);
Retorna - 0 se o arquivo não existe e nenhum arquivo novo é criado. - 1 se o arquivo já existe ou o arquivo não existe, mas um novo arquivo é criado.
Descrição
Atribui arquivo para operações de arquivo (ler, escrever, apagar ...). Todos ópera arquivo subseqüente- ções será aplicado sobre o arquivo designado.
Parâmetros: - filename: nome do arquivo que deve ser atribuído para operações de arquivo. O nome do arquivo devem estar em formato DOS 8.3 (Nome_do_arquivo.extensão). O nome do arquivo e extensão ser automaticamente preenchido com espaços pela biblioteca, se tiverem menos de comprimento necessária ("mikro.tx", ou seja - ". mikro tx">), para que o usuário não tem que cuidar disso. O nome do arquivo e extensão são maiúsculas e minúsculas. A biblioteca irá convertê-los para sustentar- caso er automaticamente, assim que o usuário não tem que tomar cuidado com isso. Além disso, a fim de manter a compatibilidade com a primeira versão desta biblioteca, nomes de arquivo pode ser inserido como cadeia MAIÚSCULAS de 11 bytes de comprimento, sem caractere ponto entre o nome do arquivo e extensão (ie "MIKROELETXT" -> MIKROELE.TXT). Neste caso, os 3 últimos caracteres da string são considerados a extensão de arquivo. - file_cre_attr: bandeiras e criação do arquivo attributs. Cada bit corresponde à atribuíveis arquivo apropriado:
Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf F t I it
Exemplo / / Cria arquivo com os atributos de arquivo se ele já não existe Cf_Fat_Assign ("MIKRO007.TXT", 0xA0);
Bit Másc
Descrição
0 0x01 Leia apenas
1 0x02 Oculto
2 0x04 Sistema
3 0x08 Volume Label
4 0x10 Subdiretório
5 0x20 Arquivo
6 0x40 Dispositivo (uso interno somente, nunca encontrado di )
7 0x80 Arquivo bandeira criação. Se o arquivo não existe e essa bandeira é
CAPÍTULO 7 Bibliotecas
Cf_Fat_Assign
mikroC PRO para PIC
282
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Cf_Fat_Read (unsigned short * Bdata);
Retorna Nada.
Descrição
Lê um byte do arquivo atualmente atribuídos aberto para leitura. Ao exe-função ponteiros de arquivo cução será definido para o próximo caractere no arquivo.
Parâmetros:
- Bdata: buffer para armazenar ler byte. Após esta execução função de leitura
d b t é Requer
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja
Cf_Fat_Init. O arquivo deve ser previamente definidos. Veja Cf_Fat_Assign.
Exemplo
char caráter; ... Cf_Fat_Read (e personagem);
Protótipo vazio Cf_Fat_Reset (unsigned long * Tamanho);
Retorna Nada.
Descrição
Abre atualmente atribuídos arquivo para leitura.
Parâmetros:
- Size: tamanho do buffer para armazenar arquivo. Após o arquivo foi aberto
para leitura de seu tamanho é Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja
Cf_Fat_Init. O i d i d fi id V j Cf F A i
Exemplo unsigned long tamanho; ... Cf_Fat_Reset (tamanho);
CAPÍTULO 7
mikroC PRO para PIC
Cf_Fat_Reset
Cf_Fat_Read
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
283
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Cf_Fat_Append ();
Retorna Nada.
Descrição Abre atualmente atribuídos arquivo para acrescentar. Após este ficheiro execução da função ponteiros será posicionado após o último byte no arquivo, então qualquer mandado de
i b Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja
Cf_Fat_Init.
Exemplo / / Abre o arquivo para anexando Cf_Fat_Append ();
Protótipo vazio Cf_Fat_Rewrite ();
Retorna Nada.
Descrição Abre atualmente atribuídos arquivo para gravação. Se o arquivo não está vazio o seu conteúdo será
d Requer Cartão CF e FC biblioteca deve ser inicializado para o arquivo operações. Veja
Cf_Fat_Init. O i d ib íd i V j Cf F A i
Exemplo / / Abre o arquivo para escrita Cf_Fat_Rewrite ();
Protótipo vazio Cf_Fat_Delete ();
Retorna Nada.
Descrição Exclui atualmente atribuídos arquivo do cartão CF.
Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf_Fat_Init. O i d i d fi id V j Cf F A i
Exemplo / / Deletar o arquivo atual Cf_Fat_Delete ();
CAPÍTULO 7 Bibliotecas
Cf_Fat_Rewrite
Cf_Fat_Append
Cf_Fat_Delete
mikroC PRO para PIC
284
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Cf_Fat_Set_File_Date (unsigned int ano, unsigned short mês, unsigned short dia, unsigned short horas, unsigned short minutos, unsigned short segundos);
Retorna Nada.
Descrição
Define a data / hora. Qualquer operação de arquivo posteriores escrita vou escrever essa selo de tempo de arquivo atualmente atribuídos's / attributs data.
Parâmetros:
- Ano: atributo ano. Valores válidos: 1980-2107 - Mês: atributo mês. Valores válidos: 12/01 - Dia: atributo dia. Valores válidos: 31/01 - Horário: Horário de atributo. Valores válidos: 0-23 - Minutos: minutos atributo. Valores válidos: 0-59
Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf_Fat_Init. O arquivo deve ser previamente atribuído. Veja Cf_Fat_Assign.
Exemplo Cf_Fat_Set_File_Date (2005,9,30,17,41,0);
Protótipo vazio Cf_Fat_Write (char * FData, não assinado data_len);
Retorna Nada.
Descrição
Grava solicitado o número de bytes para arquivo atualmente aberto para gravação atribuída.
Parâmetros:
- FData: dados a serem gravados.
Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf_Fat_Init. Arquivo devem ser previamente definidos. Veja Cf_Fat_Assign.
Exemplo
char file_contents [42]; ... Cf_Fat_Write (file_contents, 42) / / gravar dados no atribuída arquivo
CAPÍTULO 7
mikroC PRO para PIC
Cf_Fat_Write
Cf_Fat_Set_File_Date
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
285
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Cf_Fat_Get_File_Date (unsigned int * Ano, unsigned short * Mês, unsigned short * Dia, unsigned short * horas, não assinado curto * Min);
Retorna Nada.
Descrição
Lê data / hora atributos de arquivo atualmente atribuído.
Parâmetros: - Ano: buffer para armazenar atributo ano para. Após a função de atributo ano de execução
é retornado por esse parâmetro. - Mês: buffer para armazenar atributo mês para. Após meses de execução da função
atributo é retornado por esse parâmetro. - Dia: buffer para armazenar atributo dia para. Após a função de atributo é dia de execução
devolvido através deste parâmetro. - Horário: de buffer para armazenar horas atributo. Após horas de
d f
Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf_Fat_Init. O i d i d i d V j Cf F A i
Exemplo não assinado ano; char mês, dia, horas, minutos; ... Cf_Fat_Get_File_Date (& anos, & meses, & dias, e horas, e minutos);
Protótipo unsigned long Cf_Fat_Get_File_Size ();
Retorna Tamanho do arquivo atualmente atribuídos em bytes.
Descrição Esta função lê o tamanho de arquivo atualmente atribuído, em bytes.
Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf_Fat_Init. O i d i d fi id V j Cf F A i
Exemplo unsigned long my_file_size; ... Cf_Fat_Get_File_Size my_file_size = ();
CAPÍTULO 7 Bibliotecas
Cf_Fat_Set_File_Date
Cf_Fat_Set_File_Size
mikroC PRO para PIC
286
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned long Cf_Fat_Get_Swap_File (unsigned long sectors_cnt, char * Nome do arquivo, char file_attr);
Retorna - Número do setor de partida para o arquivo de swap recém-criado, se houver espaço livre suficiente no cartão CF para criar um arquivo de tamanho necessário. á i
Descrição
Esta função é usada para criar um arquivo de swap de pré-nome e tamanho da CF mídia. Se um arquivo com o nome especificado já existe na mídia, busca de con- setores consecutivos irá ignorar setores ocupados por esse arquivo. Portanto, recomenda-se recomenda-se a apagar o arquivo como se ele existe antes de chamar essa função. Se ele não é apagado e há é ainda bastante espaço para um novo arquivo de permuta, esta função irá eliminá-las depois alocação de espaço de memória novo para um novo arquivo swap. O objetivo do arquivo de swap é fazer com que a leitura ea escrita aos meios de comunicação do FC o mais rápido possível, usando o Cf_Read_Sector () e Cf_Write_Sector () funções diretamente, sem que possa causar danos ao sistema FAT. Trocar arquivos podem ser conside- rado como uma "janela" na mídia, onde o usuário pode livremente escrever / ler os dados. É objetivo principal na biblioteca do mikroC é ser usado para a aquisição rápida de dados, quando a aquisição de tempo crítico foi concluída, os dados podem ser re-escrita em um "normal" arquivo, e formatado da maneira mais adequada.
Parâmetros: - Sectors_cnt: número de setores consecutivos que o usuário quer que o arquivo de troca para ter. - Filename: nome do arquivo que deve ser atribuído para operações de arquivo. O nome do arquivo devem estar em formato DOS 8.3 (Nome_do_arquivo.extensão). O nome do arquivo e extensão será automaticamente preenchido com espaços pela biblioteca, se tiverem menos de comprimento necessária ("mikro.tx", ou seja - ". mikro tx">), para que o usuário não tem que cuidar disso. O nome do arquivo e extensão são maiúsculas e minúsculas. A biblioteca irá convertê-los para caso apropriado automaticamente, assim que o usuário não tem que tomar cuidado com isso. Além disso, a fim para manter compatibilidade com a primeira versão desta biblioteca, nomes de arquivos podem ser entrou como uma string em maiúsculas de 11 bytes de comprimento, com nenhum ponto chsaracter entre o nome do arquivo e extensão (ie "MIKROELETXT" -> MIKROELE.TXT). Neste caso os 3 últimos caracteres da cadeia são consideradas como extensão de arquivo. - File_attr: criação de arquivos e bandeiras attributs. Cada bit corresponde à atribuíveis arquivo apropriado:
Bit Másc
Descrição 0 0x01 Leia apenas 1 0x02 Oculto 2 0x04 Sistema 3 0x08 Volume Label 4 0x10 Subdiretório 5 0x20 Arquivo 6 0x40 Dispositivo (uso interno somente, nunca encontrado
di ) 7 0x80 Não utilizado
CAPÍTULO 7
mikroC PRO para PIC
Cf_Fat_Get_Swap_File
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
287
www.mecatronicadegaragem.blogspot.com
Requer Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf F I i
Exemplo
//-------------- Tente criar um arquivo de swap com o arquivo atributo, cujo tamanho será de pelo menos 1.000 setores. / / Se for bem sucedido, ele envia o n º do setor de começar tudo de UART unsigned long tamanho; ... size = Cf_Fat_Get_Swap_File (1000, "mikroE.txt", 0x20); if (tamanho) {
UART_Write (0xAA); UART_Write (Lo (tamanho)); UART_Write (Hi (tamanho)); UART_Write (Superior (tamanho)); UART_Write (Máxima (tamanho)); UART_Write (0xAA);
}
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca
O exemplo a seguir demonstra vários aspectos da biblioteca Cf_Fat16: Criação do novo arquivo e escrever para baixo; Abertura de arquivos existentes e reescrevê-lo (a escrita de iniciar-de-arquivo); Abertura arquivo de dados existentes e acrescentando a ele (a escrita de ponta-de-arquivo): abrir um arquivo e ler dados de lo (enviá-lo ao terminal USART); Criar e modificar vários arquivos de uma só vez;
/ / Set pinagem compact flash char Cf_Data_Port em PORTD;
sbit sbit sbit sbit sbit sbit sbit sbit
CF_RDY CF_WE CF_OE CF_CD1 CF_CE1 CF_A2 CF_A1 CF_A0
em em em em em em em em
RB7_bit; RB6_bit; RB5_bit; RB4_bit; RB3_bit; RB2_bit; RB1_bit; RB0_bit;
sbit CF_RDY_direction sbit CF_WE_direction sbit CF_OE_direction sbit CF_CD1_direction sbit CF_CE1_direction sbit CF_A2_direction sbit CF_A1_direction sbit CF_A0_direction
em em em em em em em em
TRISB7_bit; TRISB6_bit; TRISB5_bit; TRISB4_bit; TRISB3_bit; TRISB2_bit; TRISB1_bit; TRISB0_bit;
/ / Fim do pinout cf
const LINE_LEN = 39; char err_txt [20] = "FAT16 não encontrado"; char file_contents [LINE_LEN] = "XX CF FAT16 biblioteca por Anton Rieckertn ";
288 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
char nome [14] = "MIKRO00x.TXT";
/ / Os nomes de arquivos
unsigned short loop, loop2; unsigned long char
i, tamanho; Buffer [512];
/ / UART1 escrever um texto e nova linha (alimentação de linha de retorno + transporte) vazio UART1_Write_Line (char * Uart_text) {
UART1_Write_Text (uart_text); UART1_Write (13); UART1_Write (10);
}
/ / Cria novo arquivo e grava alguns dados a ele vazio M_Create_New_File () {
filename [7] = 'A'; Cf_Fat_Assign (e nome do arquivo, 0xA0) / / File Find existente ou criar um
uma nova Cf_Fat_Rewrite () / / Para limpar o arquivo e começar com os novos dados for (loop = 1; loop <= 99; loop + +) {
UART1_Write ('.'); file_contents [0] = loop / 10 + 48; file_contents [1%] loop = 10 + 48; Cf_Fat_Write (file_contents, LINE_LEN-1) / / gravar dados para o
atribuído arquivo }
}
/ / Cria muitos novos arquivos e grava os dados que lhes vazio M_Create_Multiple_Files () {
para (loop2 = 'B'; loop2 <= 'Z'; loop2 + +) { UART1_Write (loop2) / / o sinal de progresso filename [7] = loop2 / / definir nome Cf_Fat_Assign (e nome do arquivo, 0xA0) / / encontrar o arquivo existente ou criar
um novo Cf_Fat_Rewrite () / / Para limpar o arquivo e começar com os novos dados for (loop = 1; loop <= 44; loop + +) {
file_contents [0] loop = 10 + 48; file_contents [1%] loop = 10 + 48; Cf_Fat_Write (file_contents, LINE_LEN-1) / / gravar dados para o
atribuído arquivo }
} }
/ / Abre um arquivo existente e reescreve-lo vazio M_Open_File_Rewrite () {
filename [7] = 'C'; Cf_Fat_Assign (& Nome, 0); Cf_Fat_Rewrite (); for (loop = 1; loop <= 55; loop + +) {
Mikroelektronika - Soluções de software e hardware para o mundo embutido 289
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
file_contents [0] loop = 10 + 65; file_contents [1%] loop = 10 + 65;
mikroC PRO para PIC
Cf_Fat_Write (file_contents, LINE_LEN-1); / / Escreve dados para o atribuído arquivo
} }
/ / Abre um arquivo existente e acrescenta dados a ele / / (E altera a data / hora) vazio M_Open_File_Append () {
filename [7] = 'B'; Cf_Fat_Assign (& Nome, 0); Cf_Fat_Set_File_Date (2005,6,21,10,35,0); Cf_Fat_Append (); / arquivo / Prepare-se para anexar Cf_Fat_Write ("para 2005n mikroElektronika", 27); / / Gravar dados
atribuído arquivo }
/ / Abre um arquivo existente, lê os dados a partir dele e coloca-UART vazio M_Open_File_Read () {
caráter char;
filename [7] = 'B'; Cf_Fat_Assign (& Nome, 0); Cf_Fat_Reset (e tamanho); / / Para ler o arquivo, tamanho do procedimento de retorno de arquivo for (i = 1; <i = tamanho; i + +) {
Cf_Fat_Read (e personagem); UART1_Write (personagem); / / Escreve os dados para UART
} }
/ / Exclui um arquivo. Se o arquivo não existir, ele vai ser criada / / E depois que foi excluída. vazio M_Delete_File () {
filename [7] 'F'; Cf_Fat_Assign (filename, 0); Cf_Fat_Delete ();
}
/ / Testa se o arquivo já existe, e se sim envia sua data de criação / / E tamanho do arquivo via UART vazio M_Test_File_Exist () {
unsigned long unsigned int
fsize; ano;
unsigned short mês, dia, hora, minuto; unsigned char outstr [12]; filename [7] = 'B'; / descomente / esta linha de pesquisa para arquivos que
FAZ existe / / Filename [7] 'F'; / descomente esta linha de pesquisa para arquivos que NÃO existe
290 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
se (Cf_Fat_Assign (Nome, 0)) { arquivo //--- foi encontrado - obter a sua data Cf_Fat_Get_File_Date (& anos, & meses, & dia, & hora e minuto); WordToStr (ano, outstr); UART1_Write_Text (outstr); ByteToStr (outstr mês); UART1_Write_Text (outstr); WordToStr (outstr, dia); UART1_Write_Text (outstr); WordToStr (outstr horas); UART1_Write_Text (outstr); WordToStr (outstr minutos); UART1_Write_Text (outstr); //--- Obter o tamanho do arquivo Cf_Fat_Get_File_Size fsize = (); LongToStr ((long assinado) fsize, outstr); UART1_Write_Line (outstr);
} mais {
//--- arquivo não foi encontrado - sinal que ele UART1_Write (0x55); Delay_ms (1000); UART1_Write (0x55);
} } / / Tenta criar um arquivo de swap, cujo tamanho será de pelo menos 100 / / Setores (consulte a Ajuda para mais detalhes) vazio M_Create_Swap_File () {
unsigned int i;
for (i = 0; i <512; i + +) Buffer [i] = i;
size = Cf_Fat_Get_Swap_File (5000, "mikroE.txt", 0x20); / ver a ajuda
sobre esta função para obter detalhes
se (Tamanho) {
LongToStr ((long assinado) err_txt, tamanho); UART1_Write_Line (err_txt);
for (i = 0; i <5000; i + +) {
Cf_Write_Sector (tamanho + +, buffer); UART1_Write ('.');
} }
} / / Main. Descomente a função (s) para testar a operação desejada (s) vazio main () {
# Define COMPLETE_EXAMPLE / comentar essa linha para fazer sim- exemplo pler / menor
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO 291
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
ADCON1 | = 0x0F; CMCON | = 7;
mikroC PRO para PIC
/ / Configurar um pinos como digital / / Desligue comparadores
/ / Inicializar UART1 módulo UART1_Init (19200); Delay_ms (10);
UART1_Write_Line ("PIC-Started"); / relatório da CPI presentes
/ / Use fat16 formatação rápida, em vez de rotina init se uma formatação
é necessário se (Cf_Fat_Init () == 0) {
Delay_ms (2000); / / espera por um tempo até que o cartão é estabilizado / / Período depende usado cartão CF
//--- Iniciar o teste UART1_Write_Line ("Iniciar teste."); //--- Teste rotinas. Descomente-los um por um para testar certos
recursos M_Create_New_File (); # Ifdef COMPLETE_EXAMPLE
M_Create_Multiple_Files (); M_Open_File_Rewrite (); M_Open_File_Append (); M_Open_File_Read (); M_Delete_File (); M_Test_File_Exist (); M_Create_Swap_File ();
# Endif UART1_Write_Line ("O Fim do teste.");
} mais { UART1_Write_Line (err_txt) / / Nota: Cf_Fat_Init tenta inicial-
ize um cartão mais de uma vez. / / Se o cartão não estiver presente, initializa-
ção pode durar mais tempo (dependendo da velocidade do clock) }
}
292
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
Pin diagrama de cartão de memória CF
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
293
www.mecatronicadegaragem.blogspot.com
Protótipo vazio EEPROM_Write (unsigned int endereço, unsigned short de dados);
Retorna Nada.
Descrição
Grava dados ao especificado endereço. endereço do parâmetro é do tipo inteiro, que significa que ele suporta MCUs com mais de 256 bytes de EEPROM. Esteja ciente de que todas as interrupções serão desabilitados durante a execução do EEPROM_Write
ti (bit GIE d i t INTCON ã d ) R ti i á t PREVI
Requer Requer módulo EEPROM. Certifique-se de um atraso mínimo de 20ms entre o uso sucessivo de rotinas EEPROM_Write e EEPROM_Read. Embora PIC irá escrever o valor correto, EEPROM_Read pode retornar um resultado indefinido.
Exemplo EEPROM_Write (0x32, 19);
Protótipo unsigned short EEPROM_Read (unsigned int endereço);
Retorna Retorna byte do endereço especificado.
Descrição Lê dados a partir de determinado endereço. endereço do parâmetro é do tipo inteiro, o que significa que ele suporta MCUs com mais de 256 bytes de EEPROM.
Requer Requer módulo EEPROM. Certifique-se de um atraso mínimo de 20ms entre o uso sucessivo de rotinas EEPROM_Write e EEPROM_Read. Embora PIC irá escrever o valor correto, EEPROM_Read pode retornar um resultado indefinido.
Exemplo unsigned short ter; ... ter = EEPROM_Read (0x3F);
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
EEPROM BIBLIOTECA
Memória EEPROM de dados está disponível com uma série de microcontroladores PIC. mikroC PRO para PIC inclui biblioteca para o trabalho confortável com EEPROM.
Rotinas da biblioteca
- Eeprom_Read - Eeprom_Write
EEPROM_Read
EEPROM_Write
294
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Exemplo Biblioteca
O exemplo demonstra o uso de EEPROM Biblioteca.
Bibliotecas
char II;
vazio main () {
ANSEL = 0; ANSELH = 0;
PORTB = 0; PORTC = 0; PORTD = 0;
TRISB = 0; TRISC = 0; TRISD = 0;
/ / Variável de loop / / / Configurar um pinos como I / O digital
de (ii = 0; ii <32; ii + +)
EEPROM_Write (ii + 0x80, ii);
EEPROM_Write (0x02, 0xAA); EEPROM_Write (0x50, 0x55);
Delay_ms (1000); PORTB = 0xFF; PORTC = 0xFF; Delay_ms (1000); PORTB = 0x00; PORTC = 0x00; Delay_ms (1000);
/ / Preencha buffer de dados / / Escreve os dados de endereço 0x80 + ii
/ / Escreve alguns dados no endereço 2 / / Escreve alguns dados no endereço 0150
/ / Blink PORTB e diodos PORTC / / Para indicar início de leitura
PORTB
mostrar PORTC
mostrar
EEPROM_Read = (0x02); lo em PORTB EEPROM_Read = (0x50); lo em PORTC
/ / Lê os dados de endereço 2 e / / Lê os dados de endereço 0x50 e
Delay_ms (1000);
de (ii = 0; ii <32; ii + +) {/ / Ler bloco de 32 bytes de 0x80 endereço
PORTD EEPROM_Read = (0x80 + II) / / dados e exibição em PORTD Delay_ms (250); }
}
Mikroelektronika - Soluções de software e hardware para o mundo embutido
295
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Biblioteca Ethernet PIC18FXXJ60
PIC18FxxJ60 família de microcontroladores apresentam um módulo controlador Ethernet incorporado. Esta é uma solução completa de conectividade, incluindo implementações completas de ambos os Media Access Control (MAC) e Física transceptor Layer (PHY) módulos. Dois transformadores de pulso e um passivo poucos componentes são todos que são necessários para conectar o microcontrolador diretamente a uma rede Ethernet de trabalho.
O módulo Ethernet atende a todas as especificações IEEE 802.3 para conectividade de 10-BaseT para um par trançado de rede. É incorpora uma série de sistemas de filtragem de pacotes para limitar o pacote de entrada- ets. Ele também oferece um módulo de DMA interna para transferência rápida de dados e hardware IP assistida cálculos de soma de verificação. Provisões são feitas também para duas saídas de LED para indicar link e rede atividade
Esta biblioteca fornece a posibilidade de utilizar facilmente recurso de ethernet do MCUs acima mencionados.
Ethernet biblioteca PIC18FxxJ60 suporta:
- O protocolo IPv4. - Requisições ARP. - ICMP echo requests. - Os pedidos UDP. - Os pedidos TCP (sem pilha, sem reconstrução de pacotes). - O cliente com cache ARP. - O cliente DNS. - Cliente UDP. - O cliente DHCP. - Fragmentação do pacote não é suportado.
Nota: A variável biblioteca Global Ethernet_userTimerSec é usado para manter trilha de tempo para todos os clientes implementações (ARP, UDP de DNS e DHCP). É de responsabilidade do usuário para incrementar essa variável cada segundo em que o código se algum dos clientes é usado.
Nota:
Para usuários avançados, existem arquivos de cabeçalho ("eth_j60LibDef.h"
e
"Eth_j60LibPrivate.h") em P18 usa \ pasta do compilador, com descrição de todas as rotinas e variáveis globais, relevantes para o usuário, implementado no PIC18FxxJ60 Ethernet Biblioteca.
296
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Rotinas da biblioteca
Bibliotecas
- - - - - - - - - - - - - - - - - - - - - - - -
Ethernet_Init Ethernet_Enable Ethernet_Disable Ethernet_doPacket Ethernet_putByte Ethernet_putBytes Ethernet_putString Ethernet_putConstString Ethernet_putConstBytes Ethernet_getByte Ethernet_getBytes Ethernet_UserTCP Ethernet_UserUDP Ethernet_getIpAddress Ethernet_getGwIpAddress Ethernet_getDnsIpAddress Ethernet_getIpMask Ethernet_confNetwork Ethernet_arpResolve Ethernet_sendUDP Ethernet_dnsResolve Ethernet_initDHCP Ethernet_doDHCPLeaseTime Ethernet_renewDHCP
Mikroelektronika - Soluções de software e hardware para o mundo embutido
297
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Ethernet_Init (unsigned char * Mac, unsigned char * Ip, unsigned char FullDuplex);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele inicializa controlador Ethernet. Esta função é internamente subdividida em 2 partes para ajudá-vinculador quando vem com pouca memória.
configurações do controlador Ethernet (parâmetros não mencionados aqui são
definidos como padrão):
- Recebe o endereço inicial do buffer: 0x0000. - Receber endereço final buffer: 0x19AD. - Transmitir o endereço inicial do buffer: 0x19AE. - Transmitir endereço final buffer: 0x1fff. - Buffer RAM de leitura / gravação ponteiros no modo de auto-incremento. - Receber filtros definidos como padrão: CRC + MAC + MAC Unicast Broadcast na OU modo. - Controle de fluxo com TX e RX pausa quadros em modo full duplex. - Quadros são preenchidos com 60 + bytes CRC. - Tamanho máximo do pacote é definido como 1518. - Back-to-Back-Inter Packet Gap: 0x15 em modo full duplex; 0x12 em half-duplex
modo. - Non-Back-to-Back-Inter Packet Gap: 0x0012 em modo full duplex; 0x0C12 em
modo half duplex. - Metade loopback duplex com deficiência. - LED de configuração: padrão (LEDA link-status, atividade LEDB-link).
Parâmetros: - Mac: RAM buffer que contém o endereço MAC válido. - IP: memória intermédia que contém o endereço IP válido. l (H lf d l
Requer Nada.
Exemplo
# Define Ethernet_HALFDUPLEX 0 # Define um Ethernet_FULLDUPLEX
unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f} / / meu endereço MAC unsigned char myIpAddr = {192, 168, 1, 60} / / o meu IP addr
Ethernet_Init (myIpAddr myMacAddr, Ethernet_FULLDUPLEX);
CAPÍTULO 7 Bibliotecas
Ethernet_Init
mikroC PRO para PIC
298
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo void Ethernet_Enable (enFlt unsigned char);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Esta rotina permite que o tráfego de rede apropriada no o módulo de MCU Ethernet interna por meio de ela receber filtros (unicast, multicast, broadcast, CDC). Tipo específico de tráfego de rede será ativado se uma bit correspondente do parâmetro essa rotina de entrada está definido. Portanto, mais do que um tipo de tráfego de rede podem ser ativados ao mesmo tempo. Para este efeito, constantes biblioteca predefinida (ver tabela abaixo) pode ser ORed para formar ade- valor de entrada apropriado.
Parâmetros: - EnFlt: o tráfego de rede / receber bandeiras filtro. Cada bit corresponde a apro- tráfego de rede adequado / filtro de recepção:
Nota: Advance filtragem disponíveis no MCU módulo Ethernet internas, como a
Pattern Match, Magic Packet e Hash Table não pode ser ativada por este rotina. Adicionalmente, todos os filtros, exceto CRC, habilitado com esta rotina irá trabalhar em O d i ifi t á bid l d filt
Bi t
Másc
Descrição biblioteca predefinidos
0 0x01 MAC tráfego Broadcast / receber bandeira filtro.
Quando j MAC áf d dif á
_Ethernet_BROADCAST
1 0x02 MAC tráfego Multicast / receber bandeira filtro. Quando
d fi id áf l i MAC á
_Ethernet_MULTICAST
2 0x04 não utilizado none
3 0x08 não utilizado none
4 0x10 não utilizado none
5 0x20 CRC marca de verificação. Quando definido, pacotes com
CRC i álid á
_Ethernet_CRC
6 0x40 não utilizado none
7 0x80 MAC tráfego Unicast / receber bandeira filtro. Quando
j MAC áf i á
_Ethernet_UNICAST
CAPÍTULO 7
mikroC PRO para PIC
Ethernet_Enable
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
299
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Ethernet_Enable (enFlt unsigned char);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Esta rotina desabilita o tráfego de rede apropriada no Módulo MCU Ethernet interna por meio de ela receber filtros (unicast, multicast, transmissão, CRC). Tipo específico de tráfego de rede será desativada se o bit correspondente do parâmetro essa rotina de entrada está definido. Portanto, mais do que um tipo de tráfico de rede fic pode ser desativado, ao mesmo tempo. Para o efeito, constantes predefinidas biblioteca (Ver tabela abaixo) pode ser ORed para formar o valor de entrada apropriado.
Parâmetros: - DisFlt: o tráfego de rede / receber bandeiras filtro. Cada bit corresponde a apro- tráfego de rede adequado / filtro de recepção:
Nota: Advance filtragem disponíveis no MCU interna Ethernet módulo, como
Pattern Match, Magic Packet e Hash Table não pode ser desativado por esta rotina. Nota: Esta rotina vai mudar configuração do filtro receber on-the-fly. Não será, no qualquer forma, mexer com ativar / desativar receber / transmitir a lógica ou qualquer outra parte
Bit Másc
Descrição biblioteca predefinidos
0 0x01 MAC tráfego Broadcast / filtro de recepção
pavilhão. Quando j MAC áf d dif á
_Ethernet_BROADCAST
1 0x02 MAC tráfego Multicast / receber bandeira filtro. Quando
d fi id áf l i MAC á
_Ethernet_MULTICAST
2 0x04 não utilizado none 3 0x08 não utilizado none 4 0x10 não usados none
5 0x20 CRC marca de verificação. Quando definido, verificação de CRC será ser desativado e pacotes com CRC inválido
_Ethernet_CRC
6 0x40 não utilizado none
7 0x80 MAC tráfego Unicast / receber bandeira filtro. Quando
j MAC áf i á
_Ethernet_UNICAST
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo Ethernet_Enable (_Ethernet_CRC | _Ethernet_UNICAST); / / enable CRC verificação e tráfego Unicast
CAPÍTULO 7 Bibliotecas
Ethernet_Disable
mikroC PRO para PIC
300
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char Ethernet_doPacket ();
Retorna
- 0 - Mediante o processamento de pacotes de sucesso (zero pacotes recebidos
ou recebidos pacote processado com sucesso).
- 1 - Por erro de recepção ou receber corrupção buffer. Ethernet controlador precisa ser reiniciado.
- 2 - O pacote recebido não foi enviado para nós (não o nosso IP, nem endereço de broadcast IP). R b d IP f i IP 4
Descrição
Esta é a rotina MAC do módulo. É processos pacote recebido seguinte se existir. Os pacotes são processados da seguinte forma:
- Requisições ARP e ICMP são respondidas automaticamente. - Mediante pedido TCP Ethernet_UserTCP a função é chamada para posterior processamento. - Mediante pedido da UDP Ethernet_UserUDP função é chamado para processamento adicional.
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo se (Ethernet_doPacket () == 0) {/ / processo pacotes recebidos
... }
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init ..
Exemplo Ethernet_Disable (_Ethernet_CRC | _Ethernet_UNICAST); / desativar CRC verificação e tráfego Unicast
CAPÍTULO 7
mikroC PRO para PIC
Ethernet_doPacket
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
301
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Ethernet_putBytes (unsigned char * Ptr, unsigned char n);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele armazena o número solicitado de bytes em Ethernet RAM do controlador a partir de correntes Ethernet controlador escrever ponteiro (EWRPT) Local.
Parâmetros:
- Ptr: RAM tampão contendo bytes a serem gravados na memória RAM controlador
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo char * Buffer = "mikroElektronika"; ... Ethernet_putBytes (buffer, 16); / / coloque uma matriz de RAM em Ethernet buffer do controlador
Protótipo vazio Ethernet_putByte (unsigned char v);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele armazena um byte para endereço apontado pelo cur- ponteiro escrever controlador alugar Ethernet (EWRPT).
Parâmetros:
V l Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo char dados; ... Ethernet_putByte (dados) / / colocar um byte em Ethernet controller buffer
CAPÍTULO 7 Bibliotecas
Ethernet_putByte
Ethernet_putBytes
mikroC PRO para PIC
302
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Ethernet_putConstBytes (const unsigned char * Ptr, não assinado char n);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele armazena o número de bytes solicitado const em Eth- RAM a partir do controlador ernet do controlador Ethernet atual ponteiro escrever (EWRPT) local.
Parâmetros:
- Ptr: const tampão contendo bytes a serem gravados na memória RAM controlador
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo const char * Buffer = "mikroElektronika"; ... Ethernet_putConstBytes (buffer, 16); / / colocar um array em const buffer do controlador Ethernet
Protótipo unsigned int Ethernet_putString (unsigned char * Ptr);
Retorna Número de bytes gravados na memória RAM controlador Ethernet.
Descrição
Esta é a rotina MAC do módulo. Ele armazena string todo (excluindo a terminação nula) em RAM Ethernet controller a partir de controlador Ethernet atual ponteiro escrever (EWRPT) local.
Parâmetros:
- Ptr: string a ser gravado na memória RAM controlador Ethernet.
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo char * Buffer = "MikroElektronika"; ... Ethernet_putString (buffer); / / coloque uma seqüência de RAM em Ethernet buffer do controlador
CAPÍTULO 7
mikroC PRO para PIC
Ethernet_putConstBytes
Ethernet_putString
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
303
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Ethernet_getBytes (unsigned char * Ptr, não assinado int addr, unsigned char n);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele busca equested número de bytes de Ethernet RAM do controlador a partir de determinado endereço. Se o valor de 0xFFFF é passado como o parâmetro de endereço, a leitura início do controlador Ethernet atual leia localização (ERDPT) ponteiro. Parâmetros: - Ptr: buffer para armazenar bytes lidos a partir da RAM controlador Ethernet. Add d d t l d Eth t RAM V l álid
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo char buffer [16]; ... Ethernet_getBytes (buffer, 0x100, 16); / / lê 16 bytes, a partir a partir do endereço 0x100
Protótipo unsigned int Ethernet_putConstString (const unsigned char * Ptr);
Retorna Número de bytes gravados na memória RAM controlador Ethernet.
Descrição
Esta é a rotina MAC do módulo. Ele armazena string const todo (excluindo a rescisão nulo ção) para a RAM do controlador Ethernet a partir de controlador Ethernet atual escrever ponteiro (EWRPT) local. Parâmetros: Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo const char * Buffer = "mikroElektronika"; ... Ethernet_putConstString (buffer); / / colocar um const string em buffer do controlador Ethernet
Protótipo unsigned char Ethernet_getByte ();
Retorna Byte lido RAM controlador Ethernet.
Descrição Esta é a rotina MAC do módulo. Ele busca um byte de endereço apontado pelo atual ponteiro ler Ethernet controller (ERDPT).
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo char buffer; ... buffer = Ethernet_getByte (); / / lê um byte de con-Ethernet buffer Troller's
CAPÍTULO 7 Bibliotecas
Ethernet_putConstString
Ethernet_getByte
Ethernet_getBytes
mikroC PRO para PIC
304
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned int Ethernet_UserTCP (unsigned char * RemoteHost, não assinado int RemotePort, unsigned int localPort, unsigned int reqLength);
Retorna - 0 - Não deveria ser um resposta ao pedido. - Comprimento do campo de resposta HTTP TCP / dados - caso contrário.
Descrição
Esta é a rotina de módulo TCP. Ele é chamado internamente pela biblioteca. O acesso do usuário es para o pedido de TCP / HTTP usando algumas das rotinas Ethernet_get. A usuário coloca dados no buffer de transmissão usando algumas das rotinas Ethernet_put. A função deve retornar o tamanho em bytes da resposta HTTP TCP / ou 0 se não houver não é nada para transmitir. Se não houver necessidade de responder às solicitações TCP / HTTP, apenas definir esta Função com retorno (0) como uma única instrução.
Parâmetros:
- RemoteHost: endereço IP do cliente. - RemotePort: porto cliente TCP. - LocalPort: porta para que o pedido é enviado. - ReqLength: TCP / solicitação HTTP comprimento do campo de dados.
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo Essa função é chamado internamente pela biblioteca e não deve ser chamado pelo código de usuário.
CAPÍTULO 7
mikroC PRO para PIC
Ethernet_UserTCP
Bibliotecas
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
305
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned int Ethernet_UserUDP (unsigned char * RemoteHost, não assinado int RemotePort, unsigned int destPort, unsigned int reqLength);
Retorna - 0 - não deve haver uma resposta ao pedido. - Comprimento do campo de dados UDP resposta - outra forma.
Descrição
Esta é a rotina de módulo UDP. Ele é chamado internamente pela biblioteca. O acesso do usuário es para o pedido UDP usando algumas das rotinas Ethernet_get. O usuário coloca dados no buffer de transmissão usando algumas das rotinas Ethernet_put. A fun- ção deve retornar o tamanho em bytes da resposta UDP, ou 0 se nada para transmitir. Se você não precisa responder às solicitações UDP, basta definir esta função com um return (0) como única instrução.
Parâmetros:
- RemoteHost: endereço IP do cliente. - RemotePort: porta do cliente. - DestPort: porta para que o pedido é enviado. - ReqLength: solicitação UDP comprimento do campo de dados.
Nota: O código fonte da função é fornecida com exemplos de projetos
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo Essa função é chamado internamente pela biblioteca e não deve ser chamado pelo código de á i
Protótipo unsigned char * Ethernet_getIpAddress ();
Retorna Ponter para a variável global exploração endereço IP.
Descrição
Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar endereço IP atribuído.
Nota: Usuário deve sempre copiar o endereço IP do local de RAM retornado por esta rotina em que é buffer próprio endereço IP. Estes locais não devem ser alterados pelo usuário, em qualquer caso!
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo unsigned char endereçoip [4] / / endereço IP do usuário buffer ... memcpy (ipaddr, Ethernet_getIpAddress (), 4); / / recupera o endereço IP
CAPÍTULO 7 Bibliotecas
Ethernet_UserUDP
Ethernet_getlpAddress
mikroC PRO para PIC
306
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char * Ethernet_getDnsIpAddress
Retorna Ponter para a variável global exploração DNS o endereço IP.
Descrição
Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar atribuído endereço IP do DNS.
Nota: O usuário deve sempre copiar o endereço IP de a localização RAM retornado por esta rotina em seu próprio buffer DNS o endereço IP. Estes locais não devem ser alteradas pelo usuário, em qualquer caso!
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo unsigned char dnsIpAddr [4]; / user / Buffer DNS o endereço IP ... memcpy (dnsIpAddr, Ethernet_getDnsIpAddress (), 4); / / busca de DNS endereço do servidor
Protótipo unsigned char * Ethernet_getGwIpAddress ();
Retorna Ponter para a variável global exploração endereço IP do gateway.
Descrição
Esta rotina deve ser usado quando o servidor DHCP está presente na rede para buscar atribuído o endereço IP do gateway.
Nota: O usuário deve sempre copiar o endereço IP do local de RAM retornado por esta rotina em seu próprio gateway buffer endereço IP. Estes locais não devem ser alteradas pelo usuário, em qualquer caso!
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo unsigned char gwIpAddr [4]; / / user gateway buffer endereço IP ... memcpy (gwIpAddr, Ethernet_getGwIpAddress (), 4); / / busca gateway endereço IP
CAPÍTULO 7
mikroC PRO para PIC
Ethernet_getGwlpAddress
Ethernet_getDnslpAddress ();
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
307
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Ethernet_confNetwork (char * IPMask, char * GwIpAddr, char * DnsIpAddr);
Retorna Nada.
Descrição
Configura os parâmetros de rede (IP, máscara de sub-rede, gateway IP endereço IP de DNS endereço) quando o DHCP não é usada.
Parâmetros:
- IPMask: máscara de sub-rede IP. - GwIpAddr endereço IP do gateway. - DnsIpAddr: DNS o endereço IP.
Nota: Os parâmetros de rede acima mencionadas devem ser fixadas por esta
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
unsigned char IPMask [4] = {255, 255, 255, 0}; / network / máscara (por exemplo: 255.255.255.0) unsigned char gwIpAddr [4] = {192, 168, 1, 1}; / gateway / (Roteador), endereço IP unsigned char dnsIpAddr [4] = {192, 168, 1, 1} / / serv DNS er endereço IP ... Ethernet_confNetwork (IPMask, gwIpAddr dnsIpAddr); / network / set parâmetros de configuração
Protótipo unsigned char * Ethernet_getIpMask ()
Retorna Ponter para a variável global exploração IP, máscara de sub-rede.
Descrição
Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar atribuído máscara sub-rede IP.
Nota: O usuário deve sempre copiar o endereço IP do Local de RAM retornado por esta rotina em seu próprio IP buffer máscara. Estes locais não devem ser alteradas pelo usuário, em qualquer caso!
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo unsigned char IPMask [4]; / user / IP buffer máscara ... memcpy (IPMask, Ethernet_getIpMask (), 4); / / recupera IP máscara
CAPÍTULO 7 Bibliotecas
Ethernet_getlpMask
Ethernet_confNetwork
mikroC PRO para PIC
308
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char * Ethernet_arpResolve (unsigned char * Ip, não assinado char tmax);
Retorna - Endereço MAC para trás o endereço IP - o endereço IP solicitado foi resolvido. - 0 - De outra forma.
Descrição
Esta é a rotina do módulo ARP. Ele envia uma solicitação ARP para determinado endereço IP e aguarda ARP resposta. Se o endereço IP solicitado foi resolvido, um ARP entrada de dinheiro é usada para armazena- ção da configuração. dinheiro ARP pode armazenar até 3 entradas. Para ARP referem-se a estrutura de caixa "Eth_j60LibDef.h" cabeçalho do arquivo na pasta do compilador Uses/P18.
Parâmetros:
- IP: endereço IP a ser resolvido. - Tmax: tempo em segundos para esperar por uma resposta.
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo não assinado char IpAddr [4] = {192, 168, 1, 1} / / endereço IP ... Ethernet_arpResolve (IpAddr, 5); / / pega o endereço MAC por trás da acima do endereço IP, aguarde 5 segundos para a resposta
Protótipo unsigned char Ethernet_sendUDP (unsigned char * DestIP, não assinado int sourcePort, unsigned int destPort, unsigned char * Pkt, unsigned int pktLen);
Retorna - 1 - Pacote UDP foi enviada com sucesso. - 0 - De outra forma.
Descrição
Esta é a rotina de módulo UDP. Ele envia um pacote UDP na rede.
Parâmetros: - DestIP: remoto endereço IP do host. - SourcePort: número da porta UDP local de origem. - DestPort: destino número da porta UDP. - Pkt: pacotes para transmitir. - PktLen: comprimento em bytes do pacote para transmitir.
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo unsigned char IpAddr [4] = {192, 168, 1, 1} / / endereço IP remoto ... Ethernet_sendUDP (IpAddr, 10001, 10001, "Olá", 5); / / envia Olá mes- sábio, para o endereço IP acima, de porta UDP 10001 para a porta UDP 10001
CAPÍTULO 7
mikroC PRO para PIC
Ethernet_arpResolve
Ethernet_sendUDP
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
309
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char * Ethernet_dnsResolve (unsigned char * Host, não assinado char tmax);
Retorna - Ponteiro para o local onde o endereço IP - o nome do host solicitado foi
resolvido. - 0 - De outra forma.
Descrição
Este é o DNS módulo de rotina. Ele envia um pedido DNS para determinado nome de host e aguarda resposta do DNS. Se o nome do host solicitado foi resolvido, o seu endereço IP é armazenado na variável global biblioteca e um ponteiro que contém este endereço é retornado pela rotina. UDP porta 53 é usada como porta de DNS.
Parâmetros:
- Host: nome do host para ser resolvido. - Tmax: tempo em segundos para esperar por uma resposta.
Nota: Os serviços de Ethernet não são interrompidos enquanto esta rotina
aguarda DNS t O t d t d ã d l t d t
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
unsigned char * RemoteHostIpAddr [4] / / usuário do host buffer endereço IP ... / / Servidor SNTP: / Zurique / Suíça: Laboratório de Sistemas Integráveis, da Suíça Fed. Inst. de Tecnologia / / 129.132.2.21: swisstime.ethz.ch / / Serviços Área: Suíça e Europa memcpy (remoteHostIpAddr, Ethernet_dnsResolve ("swisstime.ethz.ch", 5), 4);
CAPÍTULO 7 Bibliotecas
Ethernet_dnsResolve
mikroC PRO para PIC
310
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char Ethernet_initDHCP (unsigned char tmax);
Retorna - 1 - Parâmetros de rede foram obtidos com sucesso. - 0 - De outra forma.
Descrição
Esta é a rotina de módulo de DHCP. Ele envia um pedido DHCP para os parâmetros de rede (IP, gateway, DNS e endereços IP, máscara de sub-rede) e aguarda pela resposta de DHCP. Se os parâmetros solicitados foram obtidos com sucesso, seus valores são armazenados em a biblioteca de variáveis globais.
Estes parâmetros podem ser obtidos usando a biblioteca apropriada, IP começar
rotinas:
- Ethernet_getIpAddress - buscar o endereço IP. - Ethernet_getGwIpAddress - buscar endereço IP do gateway. - Ethernet_getDnsIpAddress - buscar DNS o endereço IP. - Ethernet_getIpMask - buscar IP, máscara de sub-rede.
Porta UDP 68 é usado como porta de cliente DHCP e UDP 67 é usado como serv DHCP er porta.
Parâmetros:
- Tmax: tempo em segundos para esperar por uma resposta.
Nota: Os serviços de Ethernet não são interrompidos enquanto esta rotina
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo ... Ethernet_initDHCP (5); / / pega rede configuração do servidor DHCP, aguarde 5 segundos para a resposta ...
CAPÍTULO 7
mikroC PRO para PIC
Ethernet_initDHCL
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
311
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char Ethernet_renewDHCP (unsigned char tmax);
Retorna - 0 - sobre o sucesso (tempo de concessão foi renovada). - 1 - De outra forma (pedido de renovação expirou).
Descrição
Esta é a rotina de módulo de DHCP. Ele envia o endereço IP arrendamento pedido de renovação de tempo para Servidor DHCP.
Parâmetros:
T t d t Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
while (1) { ... if (Ethernet_doDHCPLeaseTime ())
Ethernet_renewDHCP (5); / / é hora de renovar o endereço IP, com 5 segundos para uma resposta ...
}
Protótipo unsigned char Ethernet_doDHCPLeaseTime ();
Retorna - 0 - Tempo de concessão ainda não tenha terminado ainda. - 1 - Tempo de concessão expirou, é hora de renovar.
Descrição Esta é a rotina de módulo de DHCP. Ela cuida de concessão de endereço IP vez por decre- tando o tempo de concessão global biblioteca do contador. Quando esse tempo expirar, é
Requer módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
while (1) { ... if (Ethernet_doDHCPLeaseTime ())
... / / É hora de renovar o IP Endereço de locação }
CAPÍTULO 7 Bibliotecas
Ethernet_doDHCPLeaseTime
Ethernet_renewDHCP
mikroC PRO para PIC
312
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Exemplo Biblioteca
Este código mostra como usar a biblioteca Ethernet PIC18FxxJ60:
- O Conselho responderá a ARP e ICMP echo requests - O conselho vai responder aos pedidos em qualquer porta UDP:
devolve o pedido de char superior com um cabeçalho feito de IP da máquina remota e número da porta
- O conselho vai responder a solicitações HTTP na porta 80, com o método GET caminhos: / Vai retornar a página HTML principal / S irá retornar o status da placa como texto / T0 ... / T7 irá mudar para RD0 RD7 pouco e retornar HTML página principal todos os outros pedidos de retorno também HTML página principal.
# Define _Ethernet_HALFDUPLEX # Define Ethernet_FULLDUPLEX
1
0
/************************************************* *********** * Cordas ROM constante * /
const unsigned char httpHeader [] = "HTTP/1.1 200 OKnContent tipo:" / / Cabeçalho HTTP const unsigned char / / Tipo de MIME HTML const unsigned char
httpMimeTypeHTML [] = "text / htmlnn";
httpMimeTypeScript [] = "text plainnn /";
/ / Tipo MIME TEXTO unsigned char HttpMethod [] = "GET /"; / * * Página web, divididos em 2 partes: * Quando chegar curto de ROM, os dados fragmentado é tratado mais efi-
cientemente pelo linker * * Esta página HTML chama as placas para obter o seu estatuto, e constrói
se com javascript * /
const char * Indexpage = / / Mude o endereço IP da página para ser atualizada "<meta Http-equiv="refresh" content="3;url=http://192.168.20.60"> <HTML> <HEAD> </ HEAD> <BODY> <h1> PIC18FxxJ60 Mini Web Server </ h1> <a href=/> Recarregar </ a> src=/s> <script </ script> <table> <td valign=top> borda da tabela <= 1 style = "font-size: 20px ; Font-family: terminal "> <th <tr> colspan=2> ADC </ th> </ tr> <tr> <td> AN2 </ td> <script> document.write (AN2) </ script> </ td> </ tr> <tr> <td> AN3 </ td> <script> document.write (AN3) </ script> </ td> </ tr>
Mikroelektronika - Soluções de software e hardware para o mundo embutido
313
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
</ Table> </ td> borda da tabela <= 1 style = "font-size: 20px; font-family: terminal "> <tr> <th colspan=2> PORTB </ th> </ tr> <script> var str, i; str = ""; for (i = 0; i <8; i + +) {Str + = "<td bgcolor=pink> # botão" + i + "</ td>"; if (PORTB e (1 <<i)) {str + = "<td bgcolor=red> ON";} mais {Str + = "<td bgcolor=#cccccc> OFF";} str +="</ td> </ tr ";} document.write (str); </ Script> ";
const char
* IndexPage2 = "</ table> </ td>
<table border=1 style="font-size:20px terminal ;"> ;font-family: <tr> <th colspan=3> PORTD </ th> </ tr> <script> var str, i; str = ""; for (i = 0; i <3; i + +) {Str + = "bgcolor=yellow> <td LED #" + i + "</ td>"; if (PORTD & (1 <<i)) {str + = "<td bgcolor=red> ON";} mais {Str + = "<td bgcolor=#cccccc> OFF";} +="</ Str td> <a href=/t"+i+"> Toggle </ a> </ td> </ tr ";} document.write (str); </ Script> </ Table> </ td> </ tr> </ table> Este é HTTP pedido # <script> Document.write (REQ) </ script> </ BODY> </ HTML> ";
/*********************************** RAM variáveis * * /
unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f}; / / Meu endereço MAC unsigned char / / O meu endereço IP unsigned char
myIpAddr [4] = {192, 168, 20, 60};
gwIpAddr [4] = {192, 168, 20, 6}; / gateway /
(Roteador), IP endereço unsigned char IPMask [4] = {255, 255, 255, 0}; / máscara de rede / (Por exemplo: 255.255.255.0) unsigned char dnsIpAddr [4] = {192, 168, 20, 1}; / / Endereço IP do servidor DNS
unsigned char unsigned char unsigned long
GetRequest [15] / / buffer solicitação HTTP dyna [30]; / / buffer para a resposta dinâmica httpCounter = 0 / / contador de HTTP pedidos
314 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
/******************************************* * funções * /
/ * * Colocar a string constante apontada por s para o con-Ethernet
Troller do buffer de transmissão. * /
/ * PutConstString unsigned int (const char * s) { ctr unsigned int = 0;
while (* s)
{ Ethernet_putByte (* s + +); ctr + +; }
retorno (CTR); } / *
/ * * Ele vai ser muito mais rápido de usar a biblioteca Ethernet_putConstString rou- dente * Em vez de putConstString rotina acima. No entanto, o código será
ser um pouco * Pouco maior. O usuário deve escolher entre tamanho e velocidade e escolher o implementação que suites * best-lo. Se você optar por ir com o def-putConstString
rial acima * A linha # define abaixo devem ser comentadas. * * /
# Define putConstString Ethernet_putConstString
/ * * Colocar a string apontada por s para o controlador Ethernet de trans- mit buffer * /
/ * PutString unsigned int (char * s) { ctr unsigned int = 0;
while (* s)
{ Ethernet_putByte (* s + +);
ctr + +; }
retorno (CTR); } / *
/ *
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido 315
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
* Ele vai ser muito mais rápido de usar a biblioteca Ethernet_putString rotina * Em vez de putString rotina acima. No entanto, o código será uma
pouco * Pouco maior. O usuário deve escolher entre tamanho e velocidade e escolher o implementação que suites * best-lo. Se você optar por ir com a definição putString-
ção acima * A linha # define abaixo devem ser comentadas. * * /
# Define putString Ethernet_putString
/ * * Esta função é chamada pela biblioteca * O usuário acessa o pedido HTTP por chamadas sucessivas para
Ethernet_getByte () * O usuário coloca os dados no buffer de transmissão por chamadas sucessivas para
Ethernet_putByte () * A função deve retornar o tamanho em bytes da resposta HTTP,
ou 0 se nada para transmitir * * Se você não precisa de responder a pedidos HTTP, * Apenas definir essa função com um return (0) como única instrução * * /
unsigned int Ethernet_UserTCP (unsigned char * RemoteHost, não assinado int RemotePort, unsigned int localPort, unsigned int reqLength)
{ unsigned int unsigned char
len = 0; / / comprimento resposta minha i / / de propósito geral char
if (localPort! = 80) / / Eu ouço apenas para solicitação da web na porta 80
{ return (0); }
/ / Obtém 10 bytes primeiro, somente o pedido, o resto não
importa aqui for (i = 0; i <10; i + +)
{ GetRequest [i] = Ethernet_getByte (); }
GetRequest [10] = 0;
if (memcmp (GetRequest, HttpMethod, 5)) / / só método GET é
suportados aqui { return (0); }
316
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC httpCounter + +;
/ / Mais um pedido feito
Bibliotecas
if (GetRequest [5] 's' ==) / / se o nome do caminho começa com pedido
s, armazenamento dinâmico de dados em buffer de transmissão { / / A string de texto respondeu por essa solicitação pode ser
interpretadas como declarações de javascript / / Por navegadores
putConstString len = (httpHeader); / / cabeçalho HTTP len + = putConstString (httpMimeTypeScript) / / com
MIME de texto tipo
/ / Adiciona valor AN2 para responder IntToStr (ADC_Read (2), Dyna); len + = putConstString (AN2 var = "); len + = putString (Dyna); len + = (";"); putConstString
/ / Adiciona valor AN3 para responder IntToStr (ADC_Read (3), Dyna); len + = putConstString ("AN3 var ="); len + = putString (Dyna); len + = (";"); putConstString
/ / Adiciona valor PORTB (botões) para responder len + = putConstString (PORTB var = "); IntToStr (PORTB, Dyna); len + = putString (Dyna); len + = (";"); putConstString
/ / Adiciona valor PORTD (LEDs) para responder len + putConstString = ("var PORTD = "); IntToStr (PORTD, Dyna); len + = putString (Dyna); len + = (";"); putConstString
/ / Adiciona os pedidos HTTP contador para responder IntToStr (httpCounter, Dyna); len + = putConstString (REQ var = "); len + = putString (Dyna); len + = (";"); putConstString }
else if (GetRequest [5] == 't') / / se o nome do caminho começa a pedido com t, alternar PORTD número de bits (LED) que vem depois
{ unsigned char bitmask = 0; / máscara de bits para
if (GetRequest (isdigit [6])) / / se 0 <= pouco <= número 9, os bits 8 e 9 não existe, mas não importa
{
Mikroelektronika - Soluções de software e hardware para o mundo embutido 317
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
bitmask GetRequest = [6] - '0 '; / / converter para inteiro ASCII
máscara de bits = 1 <bitmask </ / criar máscara de bits PORTD ^ = bitmask; / alternar / PORTD com xor operador
} }
if (len == 0) / / o que fazer para por defeito
{ putConstString len = (httpHeader); / / cabeçalho HTTP len + = putConstString (httpMimeTypeHTML) / / com o tipo MIME HTML len + = putConstString (indexpage); / HTML parte da primeira página len + = putConstString (indexPage2); / / parte segunda página HTML
}
retorno (len); / / retorna para a biblioteca com o número de
bytes para transmitir }
/ * * Esta função é chamada pela biblioteca * O usuário acessa o pedido UDP por chamadas sucessivas para
Ethernet_getByte () * O usuário coloca os dados no buffer de transmissão por chamadas sucessivas para
Ethernet_putByte () * A função deve retornar o tamanho em bytes da resposta UDP, ou
0 se nada para transmitir * * Se você não precisa responder aos pedidos UDP, * Apenas definir essa função com um return (0) como única instrução * * /
unsigned int Ethernet_UserUDP (unsigned char * RemoteHost, não assinado int RemotePort, unsigned int destPort, reqLength unsigned int)
{ unsigned int len / / comprimento resposta minha
/ / Resposta é feito do endereço IP do host remoto de seres humanos, leia-
formato capaz ByteToStr (remoteHost [0], Dyna) / / byte primeiro endereço IP dyna [3] = '.'; ByteToStr (remoteHost [1], dyna + 4) / / segundo dyna [7] = '.'; ByteToStr (remoteHost [2], dyna + 8) / / terceiro dyna [11] = '.'; ByteToStr (remoteHost [3], dyna + 12) / / quarta
dyna [15] = ':';
/ / Número da porta, em seguida, o anfitrião remoto WordToStr (RemotePort, dyna + 16);
/ / Adiciona o separador
318 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
dyna [21] '['; WordToStr (destPort, dyna + 22); dyna [27] ']'; dyna [28] = 0;
/ / O comprimento total do pedido é o comprimento do
seqüência dinâmica mais o texto do pedido len = 28 + reqLength;
/ / Coloca a dinâmica string no buffer de transmissão Ethernet_putBytes (dyna, 28);
/ / Em seguida, coloca a corda pedido convertido em char superior
para o buffer de transmissão while (reqLength -)
{ Ethernet_putByte (toupper (Ethernet_getByte ())); }
retorno (len);
resposta UDP }
/ * * Entrada principal * /
/ / Volta para a biblioteca com o comprimento do
vazio main () { ADCON1 0x0B = / / conversores ADC será usado com AN2 e AN3 CMCON = 0x07 / / desliga os comparadores
PORTA = 0; TRISA 0xFC =; / / Define PORTA como entrada para o ADC
/ / Exceto RA0 e RA1 que será utilizado como / / Ethernet e LEDA LEDB
PORTB = 0; TRISB = 0xff;
PORTD = 0; TRISD = 0;
/ PORTB set / como entrada para os botões / / Set PORTD como saída
/ * * Inicializar controlador Ethernet * /
Ethernet_Init (myIpAddr myMacAddr, Ethernet_FULLDUPLEX);
/ / Dhcp não serão utilizados aqui, portanto, use pré- Endereços Ethernet_confNetwork (IPMask, gwIpAddr dnsIpAddr);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
319
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
while (1)
mikroC PRO para PIC
/ / Faz para sempre
{ / * * Se necessário, teste o valor de retorno para obter o código de erro * /
Ethernet_doPacket () / / processo de pacotes Ethernet de entrada
/ * * Adicionar o seu material aqui, se necessário * Ethernet_doPacket () deve ser chamado o mais rápido possível * Caso contrário, os pacotes podem ser perdidos * /
} }
320
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
BIBLIOTECA DE MEMÓRIA FLASH
Esta biblioteca fornece rotinas para acessar microcontrolador de memória Flash. Note-se que protótipos diferentes para as famílias PIC16 e PIC18.
Nota: Devido às especificidades P16/P18 flash família, biblioteca flash MCU é dependente. Como a família P18 significantlly diferem no número de bytes que podem ser apagados e / ou escrita para MCUs específico, o sufixo justificativo é acrescentado aos nomes dos funções, a fim de torná-lo mais fácil de utilizá-los. operações de memória Flash são MCU dependentes:
1. Leia operações apoiadas. Para este grupo de função só ler MCU é apli
cadas. 2. Leia e Escrever operações apoiadas (escrever é executado como apagar e gravação). Para
este grupo de MCU ler e escrever funções são implementadas. Note-se que escrever operação que é executada como apagá-e-escrever, pode escrever bytes menor do que apaga.
3. Ler, Escrever e Apagar operações apoiadas. Para este grupo de leitura MCU, funções escrever e apagar são implementadas. Ainda mais um bloco de memória, flash tem de ser apagado antes de escrita (operação de gravação não é executado como apagar e- escrever).
Por favor, consultar os dados antes de MCU usando a biblioteca do flash.
Rotinas da biblioteca
- - - - - - - - - - - - -
FLASH_Read FLASH_Read_N_Bytes FLASH_Write FLASH_Write_8 FLASH_Write_16 FLASH_Write_32 FLASH_Write_64 FLASH_Erase FLASH_Erase_64 FLASH_Erase_1024 FLASH_Erase_Write FLASH_Erase_Write_64 FLASH_Erase_Write_1024
Mikroelektronika - Soluções de software e hardware para o mundo embutido
321
www.mecatronicadegaragem.blogspot.com
Protótipo
/ / Para PIC16 não assinado FLASH_Read (unsigned endereço);
/ / Para PIC18 unsigned short FLASH_Read (long endereço);
Retorna Retorna dados byte da memória Flash.
Descrição Lê dados do endereço especificado no Flash memória.
Requer Nada.
Exemplo
/ / Para PIC18 unsigned short tmp; ... tmp FLASH_Read = (0x0D00); ...
Protótipo vazio FLASH_Read_N_Bytes (long endereço, Char * data_, unsigned int N);
Retorna Nada.
Descrição Lê dados de N do especificado endereço em memória Flash para varibale apontado por dados
Requer Nada.
Exemplo FLASH_Read_N (0x0D00, data_buffer, sizeof (data_buffer));
CAPÍTULO 7 Bibliotecas
FLASH_Read
FLASH_Read_N_Bytes
mikroC PRO para PIC
322
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo
/ / Para PIC16 vazio FLASH_Write (unsigned endereço, unsigned int * de dados); / / Para PIC18 vazio FLASH_Write_8 (long endereço, Char * de dados); vazio FLASH_Write_16 (long endereço, Char * de dados); vazio FLASH_Write_32 (long endereço, Char * de dados); vazio FLASH_Write_64 (long endereço, Char * de dados);
Retorna Nada.
Descrição
Grava bloco de dados para a memória Flash. tamanho do bloco é MCU dependentes.
P16: Esta função pode apagar segmento de memória antes de escrever bloco
de dados a ele (MCU dependente). Além disso, o segmento de memória, que serão apagados pode ser maior que o tamanho do bloco de dados que serão gravados (MCU dependente). Portanto, recomenda-se a escrever, como muitos bytes como apagar. FLASH_Write
4 l i d ó i fl h li h i i h d
Requer A memória flash que irá ser escrito pode ter que ser apagada antes que essa função é h d MCU (d d ) C l MCU d h i d lh
Exemplo
Escrever valores consecutivos em 64 posições consecutivas, a partir 0x0D00:
unsigned short toWrite [64]; ... / / Inicializa array: para (I = 0; i <64; i + +) toWrite [i] = i;
/ / Escreve o conteúdo da matriz para o endereço 0x0D00: FLASH_Write_64 (0x0D00, toWrite);
CAPÍTULO 7
mikroC PRO para PIC
FLASH_Write
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
323
www.mecatronicadegaragem.blogspot.com
Protótipo
/ / Para PIC18
vazio FLASH_Erase_Write_64 (long endereço, dados char *);
vazio FLASH_Erase_Write_1024 (long endereço, dados char *);
Retorna Nenhum.
Descrição Apagar em seguida, escrever de memória bloco a partir de um determinado d Requer Nada.
Exemplo
char toWrite [64]; int i; ... / / Inicializa array: for (i = 0; i <64; i + +) toWrite [i] = i;
/ / Apagar bloco de memória no endereço 0x0D00 em seguida, escrever conteúdo a matriz para o endereço 0x0D00: FLASH_Erase_Write_64 (0x0D00, toWrite);
Protótipo
/ / Para PIC16 vazio FLASH_Erase (unsigned endereço); / / Para PIC18 vazio FLASH_Erase_64 (long endereço); vazio FLASH_Erase_1024 (long endereço);
Retorna Nada.
Descrição Apaga um bloco de memória a partir de um determinado endereço. Para P16 familly é implementar- ed somente para aqueles MCU, cuja memória flash não suporta apagar e gravação
( l d d d lh ) Requer Nada.
Exemplo Apagar um bloco de memória de 64 bytes de memória, a partir do endereço 0x0D00:
S 64 (0 0 00)
CAPÍTULO 7 Bibliotecas
FLASH_Erase
FLASH_Erase_Write
mikroC PRO para PIC
324
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Exemplo Biblioteca
O exemplo demonstra simples escrever para a memória flash para PIC16F887, em seguida, lê os dados e exibe-lo em PORTB e PORTC.
char i = 0; unsigned int addr, data_, dataAR [4] [4] = {{0 0x3FAA, 0x3FAA 1, 0x3FAA 2, 0x3FAA 3},
{0x3FAA 4, 5 0x3FAA, 0x3FAA 6, 7 0x3FAA}
{0x3FAA 8, 9 0x3FAA, 0x3FAA 10, 0x3FAA 11}
{0x3FAA 12, 0x3FAA 13, 0x3FAA 14, 0x3FAA 15}};
vazio main () {
ANSEL = 0; ANSELH = 0;
/ / Configurar um pinos como I / O digital
PORTB = 0; TRISB = 0; PORTC = 0; TRISC = 0;
/ / / / / / / /
PORTB inicial valor Definir PORTB como saída PORTC valor inicial Definir PORTC como saída
Delay_ms (500);
/ / Escreve todos os blocos / / Para a memória do programa são feitas até 16 palavras por apagar / / Oito palavras operações de gravação. A operação de gravação é / / borda alinhados e não pode ocorrer através das fronteiras. / / Por isso, é recomendada a realização de flash escreve em 16 palavras
pedaços. / / É por isso que 4 bits mais baixos do começo endereço [03:00] deve ser zero. / / Desde rotina FLASH_Write realiza escreve em blocos de 4 palavras, / / precisamos chamá-la quatro vezes seguidas. addr = 0x0430, / / endereço inicial do Flash, válida para P16F887 para (I = 0; i <4; i + +) {/ / Escreva alguns dados para Flash
Delay_ms (100); FLASH_Write (addr + i * 4, dataAR [i]);
} Delay_ms (500);
addr = 0x0430; para (I = 0; i <16; i + +) {
}
}
data_ = FLASH_Read (addr + +); Delay_us (10); PORTB data_ =; PORTC data_ => 8; Delay_ms (500);
/ / / /
/ / / /
FLASH P16 é de 14 bits, de modo MSB dois vai ser sempre '00 ' Exibir dados em PORTB LS Byte e MS PORTC Byte
Mikroelektronika - Soluções de software e hardware para o mundo embutido
325
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis devem ser definido em todos os projectos
usando LCD Gráfico
Descrição: Exemplo:
sfr extern char GLCD_DataPort;
GLCD porta de dados. char GLCD_DataPort em PORTD;
sbit sfr extern GLCD_CS1;
Chip Selecione uma
li h
sbit GLCD_CS1 em RB0_bit;
sbit sfr extern GLCD_CS2;
Chip Select 2 linha. sbit GLCD_CS2 em RB1_bit;
sbit sfr extern GLCD_RS;
Registre-se selecionar a
li h
sbit GLCD_RS em RB2_bit;
sbit sfr extern GLCD_RW;
Read / Write linha. sbit GLCD_RW em RB3_bit;
sbit sfr extern GLCD_EN;
Habilitar linha. sbit GLCD_EN em RB4_bit;
sbit sfr extern GLCD_RST;
linha de reposição. sbit GLCD_RST em RB5_bit;
sbit sfr extern GLCD_CS1_Direction;
Direção do Chip Selecione um alfinete.
sbit GLCD_CS1_Direction em TRISB0_bit;
sbit sfr extern GLCD_CS2_Direction;
Direção do Chip Selecione de 2 pinos.
sbit GLCD_CS2_Direction em TRISB1_bit;
sbit sfr extern GLCD_RS_Direction;
Direção do Regis- ter pinos de seleção.
sbit GLCD_RS_Direction em TRISB2_bit;
sbit sfr extern GLCD_RW_Direction;
Direção do Read / Write pino.
sbit GLCD_RW_Direction em TRISB3_bit;
sbit sfr extern GLCD_EN_Direction;
Direção da Habilitar alfinete.
sbit GLCD_EN_Direction em TRISB4_bit;
sbit sfr extern GLCD_RST_Direction;
Direção do Reset alfinete.
sbit GLCD_RST_Direction em TRISB5_bit;
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
GRÁFICO LCD BIBLIOTECA A mikroC PRO para PIC fornece uma biblioteca para o funcionamento 128x64 gráfico LCD (com comumente usado Samsung controlador KS108/KS107). Para criar um conjunto personalizado de imagens GLCD uso GLCD Bitmap Editor Tool. As dependências externas do LCD Gráfico Biblioteca
326
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Rotinas da biblioteca
rotinas básicas:
Bibliotecas
- - - - - -
Glcd_Init Glcd_Set_Side Glcd_Set_X Glcd_Set_Page Glcd_Read_Data Glcd_Write_Data
rotinas avançadas:
- - - - - - - - - - - -
Glcd_Fill Glcd_Dot Glcd_Line Glcd_V_Line Glcd_H_Line Glcd_Rectangle Glcd_Box Glcd_Circle Glcd_Set_Font Glcd_Write_Char Glcd_Write_Text Glcd_Image
Mikroelektronika - Soluções de software e hardware para o mundo embutido
327
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Init ();
Retorna Nada.
Descrição Inicializa o módulo GLCD. Cada uma das linhas de controle é tanto um porto e pin-config mensurável, enquanto que as linhas de dados devem ser em uma única porta ( i <00 07>)
Requer
As variáveis globais:
- GLCD_CS1: Chip selecione um pino de sinal - GLCD_CS2: Chip selecionar dois pinos de sinal - GLCD_RS: Cadastre-se pino de sinal selecione - GLCD_RW: leitura / gravação de pino - GLCD_EN: pino do sinal Enable - GLCD_RST: Reset sinal - GLCD_DataPort: porta de dados - GLCD_CS1_Direction: Direção do Chip selecione um pino - GLCD_CS2_Direction: Direção do Chip selecione 2 pinos - GLCD_RS_Direction: Direção do sinal selecione Registrar pin - GLCD_RW_Direction: Direção da leitura / gravação do sinal do pino - GLCD_EN_Direction: Direção do sinal Enable pin - GLCD_RST_Direction: Direção do pino do sinal Reset
devem ser definidas antes de utilizar esta função.
Exemplo
/ / GLCD configurações de pinagem char GLCD_DataPort em PORTD;
sbit GLCD_CS1 em RB0_bit; sbit GLCD_CS2 em RB1_bit; sbit GLCD_RS em RB2_bit; sbit GLCD_RW em RB3_bit; sbit GLCD_EN em RB4_bit; sbit GLCD_RST em RB5_bit;
sbit GLCD_CS1_Direction em TRISB0_bit; sbit GLCD_CS2_Direction em TRISB1_bit; sbit GLCD_RS_Direction em TRISB2_bit; sbit GLCD_RW_Direction em TRISB3_bit; sbit GLCD_EN_Direction em TRISB4_bit; sbit GLCD_RST_Direction em TRISB5_bit; ... ANSEL = 0; ANSELH = 0; Glcd_Init ();
CAPÍTULO 7 Bibliotecas
Glcd_Init
mikroC PRO para PIC
328
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Set_Side (unsigned short x_pos);
Retorna Nada.
Descrição
Seleciona lado GLCD. Consulte a ficha GLCD para explicação detalhada.
Parâmetros:
- X_pos: posição no eixo-x. Valores válidos: 0 .. 127
O parâmetro x_pos especifica o lado GLCD: valores 0-63 especificar o lado esquerdo, os valores de 64-127 especificar o lado direito.
Nota: Para lateral, eixo x e explicação de layout de página ver esquemática na
parte inferior
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo
As duas linhas seguintes são equivalentes, e ambos selecione no lado esquerdo da GLCD:
Glcd_Select_Side (0); Glcd_Select_Side (10);
Protótipo vazio Glcd_Set_X (unsigned short x_pos);
Retorna Nada.
Descrição
Define a posição do eixo x para x_pos pontos a partir da margem esquerda do GLCD dentro do select- lado ed.
Parâmetros:
- X_pos: posição no eixo-x. Valores válidos: 0 .. 63
Nota: Para lateral, eixo x e na página explicação layout ver esquema em baixo d á i Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo Glcd_Set_X (25);
CAPÍTULO 7
mikroC PRO para PIC
Glcd_Set_Side
Glcd_Set_X
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
329
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Set_Page (unsigned short página);
Retorna Nada.
Descrição
Seleciona a página do GLCD.
Parâmetros:
- página: número da página. Valores válidos: 0 .. 7
Nota: Para lateral, eixo x e explicação de layout de página ver esquema em
baixo
Requer GLCD precisa ser inicializado, veja rotina Glcd_Init.
Exemplo Glcd_Set_Page (5);
Protótipo unsigned short Glcd_Read_Data ();
Retorna Um byte de memória GLCD.
Descrição Lê dados a partir do local atual de memória GLCD e se move para a próximo local.
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
lado GLCD posição, eixo-x e de página deve ser definido primeiro. Veja as
funções Exemplo
unsigned short dados; ... = dados Glcd_Read_Data ();
CAPÍTULO 7 Bibliotecas
Glcd_Set_Page
Glcd_Read_Data
mikroC PRO para PIC
330
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Write_Data (unsigned short ddata);
Retorna Nada.
Descrição
Grava um byte para a posição atual em GLCD memória e move para a próxima Local.
Parâmetros:
- ddata: dados a serem gravados
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
lado GLCD posição, eixo-x e de página deve ser definido primeiro. Veja as
funções Exemplo
unsigned short dados; ... Glcd_Write_Data (dados);
Protótipo vazio Glcd_Fill (unsigned short padrão);
Retorna Nada.
Descrição
Preenche a memória GLCD com o padrão de byte.
Parâmetros:
- padrão: byte para preencher GLCD memória com
Para limpar a tela GLCD, use Glcd_Fill (0).
Para preencher a tela completamente, uso Glcd_Fill (0xFF).
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Limpar ecrã Glcd_Fill (0);
CAPÍTULO 7
mikroC PRO para PIC
Glcd_Write_Data
Glcd_Fill
Bibliotecas
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
331
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Dot (unsigned short x_pos, unsigned y_pos curto, não assinado cor curto);
Retorna Nada.
Descrição
Desenha um ponto na GLCD nas coordenadas (x_pos, y_pos).
Parâmetros:
- x_pos: x posição. Valores válidos: 0 .. 127 - y_pos: y posição. Valores válidos: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina um ponto do estado: 0 limpa ponto, um coloca um ponto, e 2 inverte ponto estado.
Nota: Para x e explicação layout eixo y ver esquema no final deste página.
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Inverter o ponto no no canto superior esquerdo Glcd_Dot (0, 0, 2);
Protótipo vazio Glcd_Line (int x_start, int y_start, int x_end, int y_end, unsigned short cor);
Retorna Nada.
Descrição
Desenha uma linha na GLCD.
Parâmetros:
- x_start: coordenada x do início da linha. Válido valores: 0 .. 127 - y_start: coordenada y do início da linha. Valores válidos: 0 .. 63 - x_end: coordenada x da extremidade da linha. Valores válidos: 0 .. 127 - y_end: coordenada y da linha final. Valores válidos: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor da linha: 0 branco, 1 preto e 2 inverte cada ponto Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Desenha uma linha entre os pontos (0,0) e (20,30) Glcd_Line (0, 0, 20, 30, 1);
CAPÍTULO 7 Bibliotecas
Glcd_Dot
Glcd_Line
mikroC PRO para PIC
332
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_H_Line (unsigned short x_start, unsigned short x_end, unsigned short y_pos, unsigned short cor);
Retorna Nada.
Descrição
Desenha uma linha horizontal sobre GLCD.
Parâmetros:
- x_start: coordenada x do início da linha. Valores válidos: 0 .. 127 -X_end: coordenada x da extremidade da linha. Valores válidos: 0 .. 127 - y_pos: coordenada y da linha horizontal. Valores válidos: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor da linha: 0 branco, 1 preto e 2 inverte cada ponto.
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Desenha uma linha horizontal entre os pontos (10,20) e (50,20) Glcd_H_Line (10, 50, 20, 1);
Protótipo vazio Glcd_V_Line (unsigned short y_start, unsigned short y_end, unsigned short x_pos, unsigned short cor);
Retorna Nada.
Descrição
Desenha uma linha vertical no GLCD.
Parâmetros:
- y_start: coordenada y do início da linha. Valores válidos: 0 .. 63 - y_end: y coordenar o fim da linha. Valores válidos: 0 .. 63 - x_pos: coordenada x da linha vertical. Valores válidos: 0 .. 127 - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor da linha: 0 branco, 1 preto e 2 inverte cada ponto.
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Desenha uma linha vertical entre os pontos (10,5) e (10,25) Glcd_V_Line (5, 25, 10, 1);
CAPÍTULO 7
mikroC PRO para PIC
Glcd_V_Line
Glcd_H_Line
Bibliotecas
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
333
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Rectangle (unsigned short x_upper_left, unsigned short y_upper_left, unsigned short x_bottom_right, unsigned short y_bottom_right, unsigned short cor);
Retorna Nada.
Descrição
Desenha um retângulo na GLCD.
Parâmetros:
- x_upper_left: coordenada x do retângulo superior esquerdo canto. Valores válidos: 0
.. 127 - y_upper_left: coordenada y do canto superior esquerdo do retângulo. Valores válidos: 0 .. 63 - x_bottom_right: coordenada x do canto inferior direito do retângulo. Válido
valores: 0 .. 127 - y_bottom_right: coordenada y do canto inferior direito retângulo canto. Válido
valores: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Desenha um retângulo entre os pontos (5,5) e (40,40) Glcd_Rectangle (5, 5, 40, 40, 1);
Protótipo vazio Glcd_Box (unsigned short x_upper_left, unsigned short y_upper_left, unsigned short x_bottom_right, unsigned short y_bottom_right, unsigned short cor);
Retorna Nada.
Descrição
Desenha uma caixa de GLCD.
Parâmetros: - x_upper_left: coordenada x da caixa de canto superior esquerdo. Valores válidos: 0 .. 127 - y_upper_left: coordenada y do canto superior esquerdo caixa. Valores válidos: 0 .. 63 - x_bottom_right: x coordenadas do canto inferior direito caixa. Valores válidos: 0 .. 127 - y_bottom_right: coordenada y do canto inferior direito caixa. Valores válidos: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Desenha uma caixa entre os pontos (5,15) e (20,40) Glcd_Box (5, 15, 20, 40, 1);
CAPÍTULO 7 Bibliotecas
Glcd_Rectangle
Glcd_Box
mikroC PRO para PIC
334
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Set_Font (const char * ActiveFont, unsigned short aFontWidth, unsigned short aFontHeight, unsigned int aFontOffs);
Retorna Nada.
Descrição
Define a fonte que será usada com Glcd_Write_Char e Glcd_Write_Text rotinas.
Parâmetros:
- activeFont: fonte a ser definido. Precisa ser formatado como um array
de byte - aFontWidth: largura dos caracteres da fonte em pontos. - aFontHeight: altura dos caracteres da fonte em pontos. - aFontOffs: número que representa a diferença entre mikroC para o PRO
PIC conjunto de caracteres ASCII e definir regular (por exemplo, se 'A' é 65 de caracteres ASCII, e 'A' é 45 no mikroC PRO para PIC conjunto de caracteres, aFontOffs é 20). Demo fontes providas com a biblioteca tem um deslocamento de 32, o que significa que início com o espaço
Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Use o costume 5x7 fonte "MyFont", que se inicia com o espaço (32): Glcd_Set_Font (& MyFont, 5, 7, 32);
Protótipo vazio Glcd_Circle (int x_center, int y_center, int raio, não assinado curto cor);
Retorna Nada.
Descrição
Desenha um círculo em GLCD.
Parâmetros:
- x_center: coordenada x do círculo centro. Valores válidos: 0 .. 127 - y_center: coordenada y do centro do círculo. Valores válidos: 0 .. 63 - Raio: Raio de tamanho - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor da linha do círculo: 0 branco, um negro, 2 i t d t Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Desenha um círculo com centro em (50,50) e raio = 10 Glcd_Circle (50, 50, 10, 1);
CAPÍTULO 7
mikroC PRO para PIC
Glcd_Circle
Glcd_Set_Font
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
335
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Write_Char (unsigned short CDH, unsigned short x_pos, unsigned short page_num, unsigned short cor);
Retorna Nada.
Descrição
Impressões sobre o caráter GLCD.
Parâmetros:
- CDH: caractere a ser escrito - x_pos: caractere inicial posição no eixo-x. Valores válidos: 0 .. (127-FontWidth) - page_num: o número da página na qual personagem vai ser escrito. Válido
valores: 0 .. 7 - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor do personagem: 0 branco, Um preto, e 2 inverte cada ponto.
Nota: Para eixo x e explicação de layout de página ver esquema na parte inferior
da Requer
GLCD precisa ser inicializado, veja Glcd_Init rotina. Use Glcd_Set_Font a especi- fy a fonte para exibição, se não é fonte especificado, fonte padrão fornecidos com 5x8 bibli t á d
Exemplo / / Escreve 'C' personagem na posição 10 no interior da página 2: Glcd_Write_Char ('C', 10, 2, 1);
CAPÍTULO 7 Bibliotecas
Glcd_Write_Char
mikroC PRO para PIC
336
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Glcd_Write_Text (char * Texto, unsigned short x_pos, não assinado curto page_num, unsigned short cor);
Retorna Nada.
Descrição
Imprime texto na GLCD.
Parâmetros:
- texto: texto a ser escrito - x_pos: posição do texto a partir do eixo-x. - page_num: o número da página na qual o texto será escrito. Valores válidos: 0 .. 7 - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor do texto: 0 branco, um preto, e 2 inverte cada ponto.
Nota: Para eixo x e explicação de layout de página ver esquema na parte inferior
da Requer
GLCD precisa ser inicializado, veja Glcd_Init rotina. Use Glcd_Set_Font para especificar a fonte para exibição, se nenhuma fonte é especificada, fonte padrão, em seguida, 5x8 fornecido com o bibli t á d Exemplo / / Escreve texto "Olá mundo!" na posição 10 no interior da página 2: Glcd_Write_Text ("Olá mundo!", 10, 2, 1);
Protótipo vazio Glcd_Image (const unsigned short código * Imagem);
Retorna Nada.
Descrição
Exibe bitmap em GLCD.
Parâmetros:
- imagem: a imagem a ser exibida. matriz bitmap deve estar na memória de código.
Use o mikroC PRO para PIC integrada GLCD Bitmap Editor para converter a
imagem para Requer GLCD precisa ser inicializado, veja Glcd_Init rotina.
Exemplo / / Desenha my_image imagem GLCD Glcd_Image (my_image);
CAPÍTULO 7
mikroC PRO para PIC
Glcd_Write_Text
Glcd_Image
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
337
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca O exemplo a seguir demonstra as rotinas da biblioteca GLCD: inicialização, claro (padrão de preenchimento), exibindo imagens, desenhar linhas, círculos, retângulos e caixas, o texto visualização e manuseio. / / Declarações ----------------------------------------------- ------- ------------ const char código truck_bmp [1024]; //------------------------------------------------ -------------- final declarações
/ / Conexões GLCD módulo char GLCD_DataPort em PORTD;
sbit sbit sbit sbit sbit sbit
GLCD_CS1 GLCD_CS2 GLCD_RS GLCD_RW GLCD_EN GLCD_RST
em em em em em em
RB0_bit; RB1_bit; RB2_bit; RB3_bit; RB4_bit; RB5_bit;
sbit GLCD_CS1_Direction em TRISB0_bit; sbit GLCD_CS2_Direction em TRISB1_bit; sbit GLCD_RS_Direction sbit GLCD_RW_Direction sbit GLCD_EN_Direction
em TRISB2_bit; em TRISB3_bit; em TRISB4_bit;
sbit GLCD_RST_Direction em TRISB5_bit; / / Fim conexões GLCD módulo
vazio delay2S () {
/ / 2 segundos, função de atraso
Delay_ms (2000); }
vazio main () {
unsigned short II; char * SomeText;
# Define COMPLETE_EXAMPLE / comentar essa linha para fazer
exemplo mais simples e menores ANSEL = 0; / / Configurar uma pinos como digital ANSELH = 0; C1ON_bit = 0; / comparadores Desativar C2ON_bit = 0;
Glcd_Init (); Glcd_Fill (0x00);
while (1) {
/ / Inicializar GLCD / / Limpar GLCD
338
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC # Ifdef COMPLETE_EXAMPLE
Bibliotecas
Glcd_Image (truck_bmp); delay2S (); delay2S ();
# Endif
Glcd_Fill (0x00);
Glcd_Box (62,40,124,56,1); Glcd_Rectangle (5,5,84,35,1); Glcd_Line (0, 0, 127, 63, 1);
/ / Desenha a imagem
/ / Limpar GLCD
/ / Desenha caixa / / Desenhar retângulo / / Desenha uma linha
delay2S ();
de (ii = 5; ii <60; ii + = 5) {/ / Desenha linhas horizontais e verticais
Delay_ms (250); Glcd_V_Line (2, 54, II, 1); Glcd_H_Line (2, 120, II, 1);
}
delay2S ();
Glcd_Fill (0x00); / / Limpar GLCD # Ifdef COMPLETE_EXAMPLE
Glcd_Set_Font (Character8x7, 8, 7, 32); / font Escolha / v. __Lib_GLCDFonts.c Na pasta Usos
# Endif Glcd_Write_Text ("mikroE", 1, 7, 2) / / Escreve o texto
para (Ii = 1; <ii = 10; ii + +)
Glcd_Circle (63,32, 3 * ii, 1); delay2S ();
Glcd_Box (12,20, 70,57, 2); delay2S ();
# Ifdef COMPLETE_EXAMPLE
Glcd_Fill (0xFF);
/ / Desenha círculos / / Desenha caixa / / Preencha GLCD
Glcd_Set_Font (Character8x7, 8, 7, 32); / Change / fonte someText = "8x7 Fonte"; Glcd_Write_Text (someText, 5, 0, 2) / / Escreve o texto delay2S ();
Glcd_Set_Font (System3x5, 3, 5, 32); / font / Alterar
someText = "3X5 únicas capitais"; Glcd_Write_Text (someText, 60, 2, 2) / / Escreve o texto delay2S ();
Glcd_Set_Font (font5x7, 5, 7, 32);
someText = "5x7 Fonte";
/ / Alterar a fonte
Mikroelektronika - Soluções de software e hardware para o mundo embutido
339
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Glcd_Write_Text (someText, 5, 4, 2);
mikroC PRO para PIC
/ / Escreve a string
delay2S ();
Glcd_Set_Font (FontSystem5x7_v2, 5, 7, 32); / / Alterar fonte someText = "5x7 Fonte (v2)"; Glcd_Write_Text (someText, 5, 6, 2) / / Escreve o texto delay2S ();
# Endif }
}
Conexão HW
GLCD conexão HW
340
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio I2C1_Init (unsigned long relógio);
Retorna Nada.
Descrição
Inicializa I C ˛ com desejado relógio (Ver folha de dados do dispositivo para os valores
corretos em respeito com FOSC). Precisa ser chamada antes de usar outras funções de I ˛ C Library.
Você não precisa configurar as portas manualmente para usando o módulo; biblioteca terá id d i i i li
Requer
Biblioteca requer MSSP módulo sobre PORTB ou PORTC.
Nota: O cálculo do valor do relógio que eu ˛ C é realizada pelo compilador, como seria produzir um código relativamente grande, se realizado em o nível biblioteca. Portanto, o compilador precisa saber o valor do parâmetro em tempo de compilação. É por isso que este parâmetro deve ser uma constante, e não uma variável.
Exemplo I2C1_Init (100000);
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
BIBLIOTECA I ² C
I ˛ C completo módulo mestre MSSP está disponível com um número de modelos PIC MCU. mikroC PRO para PIC fornece biblioteca que apoia o comandante do I ˛ modo C.
Nota: Alguns MCUs ter vários módulos ˛ C. A fim de usar a desejar eu ˛ rotina da biblioteca C, sim- ply alterar o número 1 no protótipo com o número adequado de módulo, ou seja, I2C1_Init (100000);
Rotinas da biblioteca
- - - - - - -
I2C1_Init I2C1_Start I2C1_Repeated_Start I2C1_Is_Idle I2C1_Rd I2C1_Wr I2C1_Stop
I2C1_Init
Mikroelektronika - Soluções de software e hardware para o mundo embutido
341
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short I2C1_Rd (unsigned short ack);
Retorna Retorna um byte a partir do escravo.
Descrição Lê um byte a partir do escravo, e não envia reconhecer sinal se o parâmetro ack é 0, caso contrário, ele envia reconhecer.
Requer I2C deve ser configurado antes de usar esta função. Veja I2C1_Init. Além disso, START deve ser emitido, a fim de utilizar esta função. Veja I2C1_Start.
Exemplo Ler e enviar dados não reconhece sinal:
unsigned short ter; ... ter = I2C1_Rd (0);
Protótipo unsigned short I2C1_Start (void);
Retorna Se não houver erro, a função retorna 0.
Descrição Determina se o bus I2C é gratuito e as questões START. Requer I2C deve ser configurado antes de usar esta função. Veja I2C1_Init.
Exemplo I2C1_Start ();
Protótipo unsigned short I2C1_Is_Idle (void);
Retorna Retorna 1 se o bus I2C é livre, caso contrário retorna 0. Descrição Testa se I2C bus está livre.
Requer I2C deve ser configurado antes de usar esta função. Veja I2C1_Init. Exemplo se (I2C1_Is_Idle ()) {...}
Protótipo vazio I2C1_Repeated_Start (void);
Retorna Nada. Descrição Questões repetidas START.
Requer I2C deve ser configurado antes de usar esta função. Veja I2C1_Init. Exemplo I2C1_Repeated_Start ();
CAPÍTULO 7 Bibliotecas
I2C1_Start
I2C1_Repeated_Start
I2C1_Is_Idle
I2C1_Rd
mikroC PRO para PIC
342
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short I2C1_Wr (unsigned short data_);
Retorna Retorna 0 se não houve erros.
Descrição Envia byte de dados (parâmetros) através do barramento I2C.
Requer I2C deve ser configurado antes de usar esta função. Veja I2C1_Init. Além disso, START deve ser emitido, a fim de utilizar esta função. Veja I2C1_Start.
Exemplo I2C1_Write (0xA3);
Protótipo vazio I2C1_Stop (void);
Retorna Nada.
Descrição Problemas de sinal STOP.
Requer I2C deve ser configurado antes de usar esta função. Veja I2C1_Init. Exemplo I2C1_Stop ();
CAPÍTULO 7
mikroC PRO para PIC
I2C1_Wr
I2C1_Stop
Bibliotecas
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
343
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca Este código demonstra o uso da biblioteca C eu ˛. PIC MCU está conectado (SCL, os pinos SDA) a EEPROM 24C02. Programa envia dados para EEPROM (os dados são gravados no endereço 2). Então, podemos ler os dados via I ˛ C da EEPROM e enviar seu valor para PORTB, para verificar se o ciclo foi bem sucedida (veja a figura abaixo como fazer a interface com PIC 24C02). vazio main () {
ANSEL = 0; ANSELH = 0; PORTB = 0; TRISB = 0;
/ / Configurar um pinos como I / O digital / / Configurar PORTB como saída
}
I2C1_Init (100000); I2C1_Start (); I2C1_Wr (0xA2); I2C1_Wr (2); I2C1_Wr (0xF0); I2C1_Stop ();
Delay_100ms (); I2C1_Start (); I2C1_Wr (0xA2); I2C1_Wr (2); I2C1_Repeated_Start (); I2C1_Wr (0xA3); PORTB I2C1_Rd = (0U); I2C1_Stop ();
/ / / / / / / / / / / / / / / / / / / / / / / / / /
inicializar comunicação I2C emitir sinal de início I2C enviar bytes via I2C (endereço do dispositivo + W) enviar bytes (endereço do local EEPROM) enviar dados (dados a serem escritos) emissão de sinal de paragem I2C emitir sinal de início I2C enviar bytes via I2C (dispositivo Endereço + W) enviar bytes (envio de dados) sinal questão de I2C repetidas início enviar (endereço do dispositivo + R) byte Leia os dados (não reconhece) emissão de sinal de paragem I2C
344
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
Interface com PIC 24C02 via I2C
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
345
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Keypad_Init (void);
Retorna Nada.
Descrição Inicializa porta para trabalhar com o teclado.
Requer
A variável global:
- keypadPort - Teclado porto
devem ser definidas antes de utilizar esta função.
Exemplo
/ / Conexões teclado módulo char keypadPort em PORTD; / / Fim do teclado conexões do módulo ... Keypad_Init ();
As seguintes variáveis devem
ser definida em todos os
Descrição: Exemplo:
sfr extern char keypadPort;
Teclado Porto. char keypadPort em PORTD;
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
TECLADO BIBLIOTECA
A mikroC PRO para PIC fornece uma biblioteca para trabalhar com 4x4 teclado. As rotinas de biblioteca pode também ser usado com 4x1, 4x2, 4x3 ou teclado. Para uma explicação conexões ver esquema no bot- Tom desta página.
As dependências externas do teclado Biblioteca
Rotinas da biblioteca
- Keypad_Init - Keypad_Key_Press - Keypad_Key_Click
Keypad_Init
346
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo char Keypad_Key_Click (void);
Retorna O código de uma tecla clicada (1 .. 16). Se nenhuma tecla for clicado, retorna 0.
Descrição
Chamar a atenção para Keypad_Key_Click é uma chamada de bloqueio: a função espera até que alguma tecla for pressionado e liberado. Quando liberado, a função retorna 1 a 16, dependendo a chave. Se mais de uma tecla é pressionada, simultaneamente, a função vai esperar até todas as teclas pressionadas são liberados. Depois que a função irá retornar o ódi d
Requer Porto precisa ser inicializado para trabalhar com a biblioteca do teclado, consulte
K d I it Exemplo
char kp; ... kp Keypad_Key_Click = ();
Protótipo char Keypad_Key_Press (void);
Retorna O código de uma tecla pressionada (1 .. 16). Se nenhuma tecla for pressionada, retorna 0.
Descrição Lê a tecla do teclado quando a chave fica pressionado.
Requer Porto precisa ser inicializado para trabalhar com a biblioteca do teclado, consulte K d I it
Exemplo char kp; ... kp Keypad_Key_Press = ();
CAPÍTULO 7
mikroC PRO para PIC
Keypad_Key_Press
Keypad_Key_Click
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
347
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca Este é um exemplo simples do uso da Biblioteca do teclado. Ele suporta teclados com 1 .. 4 linhas e 1 .. 4 colunas. O código a ser devolvido pelo Keypad_Key_Click () função é na faixa a partir de 1 .. 16. Neste exemplo, o código retornado é transformado em ASCII Códigos [0 .. 9, A.. F] e exibido no LCD. Além disso, uma pequena de byte único dis-counter desempenha no segundo número de linha de LCD de teclas pressionadas. kp unsigned short, cnt, oldstate = 0; char txt [6];
/ / Conexões teclado módulo keypadPort char na PORTD; / / Fim conexões teclado módulo
/ / Conexões do módulo do LCD sbit LCD_RS em RB4_bit; sbit LCD_EN em RB5_bit; sbit LCD_D4 em RB0_bit; sbit LCD_D5 em RB1_bit; sbit LCD_D6 em RB2_bit; sbit LCD_D7 em RB3_bit; sbit LCD_RS_Direction em TRISB4_bit; sbit LCD_EN_Direction em TRISB5_bit; sbit LCD_D4_Direction em TRISB0_bit; sbit LCD_D5_Direction em TRISB1_bit; sbit LCD_D6_Direction em TRISB2_bit; sbit LCD_D7_Direction em TRISB3_bit; / / Fim do módulo LCD conexões
vazio main () {
cnt = 0; Keypad_Init (); Lcd_Init (); Lcd_Cmd (_LCD_CLEAR); Lcd_Cmd (_LCD_CURSOR_OFF); Lcd_Out (1, 1, "1");
/ / / / / / / / / /
Zerar contador Inicializar Teclado Inicializar Lcd O visor claro Cursor para fora
Lcd_Out (1, 1, "Key:"); Lcd_Out (2, 1, "Times:");
fazer {
kp = 0;
/ / Escreve o texto da mensagem no LCD / / Reset variável código-chave
/ / Espera tecla a ser pressionada e liberada fazer / Kp / = Keypad_Key_Press (); / / código da loja na variável-chave kp
kp = Keypad_Key_Click (); / / código da loja na variável-chave kp enquanto (Kp!);
348 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC / / Valor Preparar switch (KP) {
Bibliotecas para a produção, transformação chave para o seu valor ASCII
/ / Case 10: kp keypad4x3
/ / Case 11: kp / / Case 12: kp / / Default: kp
= 42; break;
= 48; break; = 35; break; + = 48;
/ / '*' / Descomente / este bloco para
/ / '0 ' / / '#'
caso
caso caso caso caso caso caso caso caso
1: Kp = 49; break; / / 1 / Descomente para bloquear este keypad4x4 2: kp = 50; break; / 2 3: kp = 51; break; / 3 4: kp = 65; break; / / A 5: kp = 52; break; / 4 6: kp = 53; break; / / 5 7: kp = 54; break; / 6 8: kp = 66; break; / B 9: kp = 55; break; / / 7
caso 10: kp = 56; break; / / 8 caso 11: kp = 57; break; / / 9 caso 12: kp = 67; break; C / caso 13: kp = 42; break; / / * caso 14: kp = 48; break; / / 0 caso 15: kp = 35; break; / / # caso 16: kp = 68; break; D / /
}
se (Kp! Oldstate =) {/ / tecla pressionada difere da anterior
cnt = 1; oldstate = kp; }
mais {/ / Tecla pressionada é o mesmo que anterior cnt + +; }
}
Lcd_Chr (1, 10, kp);
se (Cnt == 255) {
cnt = 0; Lcd_Out (2, 10 ", }
WordToStr (txt CNT); Lcd_Out (2, 10, txt);
} enquanto (1);
/ / Mostra o valor ASCII chave em LCD / / Se contador estouro varialble "); / / Valor de Transformação contra a cadeia / / Valor expositor em LCD
Mikroelektronika - Soluções de software e hardware para o mundo embutido
349
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Conexão HW
4x4 para conexão da HMI regime
mikroC PRO para PIC
350
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis deve ser definida em todos os
projetos usando L d
Descrição: Exemplo:
sbit sfr extern LCD_RS:
Registre-line Select. sbit LCD_RS em RB4_bit;
sbit sfr extern LCD_EN:
Habilitar linha. sbit LCD_EN em RB5_bit;
sbit sfr extern LCD_D7;
Dados linha 7. sbit LCD_D7 em RB3_bit;
sbit sfr extern LCD_D6;
Dados de 6 linhas. sbit LCD_D6 em RB2_bit;
sbit sfr extern LCD_D5;
Dados de 5 linhas. sbit LCD_D5 em RB1_bit;
sbit sfr extern LCD_D4;
Os dados de 4 linhas. sbit LCD_D4 em RB0_bit;
sbit sfr extern LCD_RS_Direction;
Registre Selecione a direção
lfi t
sbit LCD_RS_Direction em TRISB4_bit;
sbit sfr extern LCD_EN_Direction;
Habilitar direção dos pinos. sbit LCD_EN_Direction em TRISB5_bit;
sbit sfr extern LCD_D7_Direction;
Dados de 7 pinos direção. sbit LCD_D7_Direction em TRISB3_bit;
sbit sfr extern LCD_D6_Direction;
Dados de 6 pinos de direção. sbit LCD_D6_Direction em TRISB2_bit;
sbit sfr extern LCD_D5_Direction;
Dados de 5 pinos de direção. sbit LCD_D5_Direction em TRISB1_bit;
sbit sfr extern LCD_D4_Direction;
Dados de 4 pinos de direção. sbit LCD_D4_Direction em TRISB0_bit;
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
LCD BIBLIOTECA
A mikroC PRO para PIC fornece uma biblioteca de comunicação com LCDs (com HD44780 controladores compatíveis) através do interface de 4 bits. Um exemplo de con-LCD nections é dada sobre o esquema na parte inferior desta página.
Para criar um conjunto de personagens personalizadas LCD usam LCD personalizado Personagem Tool.
Externas dependências da Biblioteca LCD
Mikroelektronika - Soluções de software e hardware para o mundo embutido
351
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Lcd_Init ();
Retorna Nada. Descrição Inicializa o módulo LCD.
Requer
As variáveis globais: - LCD_D7: Dados bit 7 - LCD_D6: Dados bit 6 - LCD_D5: Dados bit 5 - LCD_D4: Os dados de 4 bits - LCD_RS: Registo Select (dados / instruções) pinos de sinal - LCD_EN: Habilitar sinal do pino - Direção do pino Dado 7: LCD_D7_Direction - Direção dos Dados de 6 pinos: LCD_D6_Direction - Direção dos Dados 5 pinos: LCD_D5_Direction - Direção dos Dados de 4 pinos: LCD_D4_Direction - LCD_RS_Direction: Direção do Registo Selecione pinos - LCD_EN_Direction: Direção do sinal Enable pin
devem ser definidas antes de utilizar esta função.
Exemplo
/ / Configurações de pinagem Lcd sbit LCD_RS em RB4_bit; sbit LCD_EN em RB5_bit; sbit LCD_D7 em RB3_bit; sbit LCD_D6 em RB2_bit; sbit LCD_D5 em RB1_bit; sbit LCD_D4 em RB0_bit; / / Direção Pin sbit LCD_RS_Direction em TRISB4_bit; sbit LCD_EN_Direction em TRISB5_bit; sbit LCD_D7_Direction em TRISB3_bit; sbit LCD_D6_Direction em TRISB2_bit; sbit LCD_D5_Direction em TRISB1_bit; sbit LCD_D4_Direction em TRISB0_bit; ... Lcd_Init ();
CAPÍTULO 7 Bibliotecas
Rotinas da biblioteca
mikroC PRO para PIC
- - - - - -
Lcd_Init Lcd_Out Lcd_Out_Cp Lcd_Chr Lcd_Chr_Cp Lcd_Cmd
Lcd_Init
352
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Lcd_Out (char linha, char coluna, char * Texto);
Retorna Nada.
Descrição
Imprime texto na tela LCD a partir de determinada posição. Ambas as variáveis string e-litro als pode ser passado como um texto.
Parâmetros:
- linha: número da linha de partida posição - coluna: número da coluna a partir posição Requer O módulo LCD deve ser inicializado. Veja rotina Lcd_Init.
Exemplo / / Escreve o texto "Olá!" no LCD a partir da linha 1, coluna 3: Lcd_Out (1, 3, "Olá!");
Protótipo vazio Lcd_Out_CP (char * Texto);
Retorna Nada.
Descrição
Imprime texto na tela LCD na posição atual do cursor. Ambas as variáveis e literais string pode ser passado como um texto.
Parâmetros:
t t texto a ser escrito Requer O módulo LCD deve ser inicializado. Veja rotina Lcd_Init.
Exemplo / / Escreve o texto "Aqui!" na posição atual do cursor: Lcd_Out_CP ("Aqui!");
CAPÍTULO 7
mikroC PRO para PIC
Lcd_Out
Lcd_Out_CP
Bibliotecas
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
353
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Lcd_Chr (char linha, char coluna, char out_char);
Retorna Nada.
Descrição
Imprime caracteres em LCD na posição especificada. Ambas as variáveis e literais podem ser passado como um personagem.
Parâmetros:
- linha: escrito Posição de linha número - coluna: escrever o número da coluna posição i Requer O módulo LCD deve ser inicializado. Veja rotina Lcd_Init.
Exemplo / / Escreve caracter "i" na linha 2, coluna 3: Lcd_Chr (2, 3, 'i');
Protótipo vazio Lcd_Chr_CP (char out_char);
Retorna Nada.
Descrição
Imprime caracteres em LCD na posição atual do cursor. Ambas as variáveis e literais pode ser passado como um personagem.
Parâmetros:
t h caractere a ser escrito Requer O módulo LCD deve ser inicializado. Veja rotina Lcd_Init.
Exemplo / / Escrever "e" caractere na posição atual do cursor: Lcd_Chr_CP ('e');
CAPÍTULO 7 Bibliotecas
Lcd_Chr
Lcd_Chr_Cp
mikroC PRO para PIC
354
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Lcd Comando Finalidade LCD_FIRST_ROW Move o cursor para a linha 1
LCD_SECOND_ROW Move o cursor para a linha 2
LCD_THIRD_ROW Move o cursor para a 3 ª fila
LCD_FOURTH_ROW Move o cursor para a linha 4
LCD_CLEAR O visor claro
LCD_RETURN_HOME Retornar cursor para a posição inicial, retorna uma tela deslocado para sua posição original
i M d d RAM é f d LCD_CURSOR_OFF Desligue o cursor
LCD_UNDERLINE_ON Sublinhar o cursor em
LCD_BLINK_CURSOR_ON Intermitência do cursor em
LCD_MOVE_CURSOR_LEFT Move o cursor para esquerda sem alterar RAM exibir dados
LCD_MOVE_CURSOR_RIGHT Mover cursor para direita sem alterar a RAM de dados de exibição
LCD_TURN_ON Vire a tela LCD
LCD_TURN_OFF Ligue o monitor LCD
LCD_SHIFT_LEFT Shift display esquerdo, sem alterar RAM exibir dados
LCD_SHIFT_RIGHT Shift direito de exibição sem alterar RAM exibição de dados
Protótipo vazio Lcd_Cmd (char out_char);
Retorna Nada.
Descrição
Envia comando para LCD.
Parâmetros:
- out_char: comando a ser enviado
Nota: Constantes pré-definidas podem ser passados para a função, consulte
Disponível LCD
Requer O módulo LCD deve ser inicializado. Veja a tabela Lcd_Init.
Exemplo / / Clear LCD: Lcd_Cmd (_LCD_CLEAR);
CAPÍTULO 7
mikroC PRO para PIC
Lcd_Cmd
Disponível Comandos LCD
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
355
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca O código a seguir demonstra o uso da rotinas Lcd Biblioteca: / / Conexões do módulo do LCD sbit LCD_RS em RB4_bit; sbit LCD_EN em RB5_bit; sbit LCD_D4 em RB0_bit; sbit LCD_D5 em RB1_bit; sbit LCD_D6 em RB2_bit; sbit LCD_D7 em RB3_bit; sbit LCD_RS_Direction em TRISB4_bit; sbit LCD_EN_Direction em TRISB5_bit; sbit LCD_D4_Direction em TRISB0_bit; sbit LCD_D5_Direction em TRISB1_bit; sbit LCD_D6_Direction em TRISB2_bit; sbit LCD_D7_Direction em TRISB3_bit; / / Fim conexões do módulo do LCD
char char char char
txt1 [] txt2 [] txt3 [] txt4 []
= = = =
"MikroElektronika"; "EasyPIC5"; "Lcd4bit"; "Exemplo";
char i;
vazio Move_Delay () {
Delay_ms (500); }
vazio main () {
TRISB = 0; PORTB = 0xFF; TRISB = 0xff; ANSEL = 0; ANSELH = 0; Lcd_Init ();
Lcd_Cmd (_LCD_CLEAR);
/ / Variável do laço / / Função usada para o texto em movimento / / Você pode alterar a velocidade de movimento aqui / / Configurar um pinos como I / O digital / / Inicializar LCD
/ / Exibe Limpar Lcd_Cmd (_LCD_CURSOR_OFF); Lcd_Out (1,6, txt3);
Lcd_Out (2,6, txt4); Delay_ms (2000); Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1, txt1); Lcd_Out (2,5, txt2);
/ Cursor / off / / Escreve o texto na primeira linha
/ / Escreve o texto na segunda linha / / Exibe Limpar / / Escreve o texto em primeiro linha / / Escreve o texto na segunda linha
356
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Delay_ms (2000);
/ / Texto em Movimento for (i = 0; i <4; i + +) {/ / Move o texto à direita 4 vezes
Lcd_Cmd (_LCD_SHIFT_RIGHT); Move_Delay ();
}
Bibliotecas
while (1) {
for (i = 0; i <8; i + +) {
/ / Loop infinito / / Move o texto para a esquerda 7 vezes
Lcd_Cmd (_LCD_SHIFT_LEFT); Move_Delay ();
}
for (i = 0; i <8; i + +) {/ / Move o texto à direita 7 vezes
Lcd_Cmd (_LCD_SHIFT_RIGHT); Move_Delay ();
} }
}
Mikroelektronika - Soluções de software e hardware para o mundo embutido
357
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
conexão HW
LCD conexão HW
mikroC PRO para PIC
358
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis deve ser definida em todos os pro-
ECTS com Manchester Bibli d
Descrição: Exemplo:
sbit sfr extern MAN- RXPIN;
Receber linha. sbit MANRXPIN em RC0_bit;
sbit sfr extern MAN- TXPIN;
linha de transmissão. sbit MANTXPIN em RC1_bit;
sbit sfr extern MAN- RXPIN_Direction;
Direção do recebimento do
i
sbit MANRXPIN_Direction em TRISC0_bit;
sbit sfr extern MAN- TXPIN_Direction;
Direção do pino de transmissão. sbit MANTXPIN_Direction em TRISC1_bit;
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
MANCHESTER BIBLIOTECA DO CÓDIGO
A mikroC PRO para PIC fornece uma biblioteca para manipulação Manchester sinais codificados. O código de Manchester é um código em que os dados e sinais de clock são combinados para formar um único fluxo de dados de auto-sincronização, cada bit codificado contém uma transição no ponto médio de um período de pouco, a direção da transição determina se o bit é 0 ou 1, o segundo semestre é o valor do bit verdade e no primeiro semestre é o complemento de o valor do bit verdade (como mostrado na figura abaixo).
Notas: O Manchester recebe rotinas são o bloqueio de chamadas (Man_Receive_Init e Man_Synchro). Isto significa que a MCU irá esperar até que a tarefa tem sido per- formados (por exemplo, byte é recebido, a sincronização alcançados, etc.)
Nota: Manchester biblioteca de código implementa atividades baseadas em tempo, por isso interrompe necessidade a ser desativado quando usá-lo.
As dependências externas do Manchester Code Library
Mikroelektronika - Soluções de software e hardware para o mundo embutido
359
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned int Man_Receive_Init ();
Retorna - 0 - Se a inicialização e sincronização foram bem sucedidas. - 1 - Após a sincronização sem êxito. - 255 - Aquando usuário abortar.
Descrição
A função de receptor configura o pino e realiza processo de sincronização no Para recuperar a taxa de transmissão do sinal de entrada.
Nota: Em caso de múltiplos erros persistentes na recepção, o usuário deve chamar
esse
Requer
As variáveis globais:
MANRXPIN: Receber linha MANRXPIN_Direction: Direção do pino de recepção
devem ser definidas antes de utilizar esta função.
Exemplo
/ / Inicializar Receptor sbit MANRXPIN em RC0_bit; sbit MANRXPIN_Direction em TRISC0_bit; ... Man_Receive_Init ();
CAPÍTULO 7 Bibliotecas
Rotinas da biblioteca
mikroC PRO para PIC
- - - - - -
Man_Receive_Init Man_Receive Man_Send_Init Man_Send Man_Synchro Man_Break
As rotinas a seguir são para uso interno, compilador só:
- Manchester_0 - Manchester_1 - Manchester_Out
Man_Receive_Init
360
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Man_Send_Init ();
Retorna Nada.
Descrição A função configura Transmissor pino.
Requer
As variáveis globais:
MANTXPIN: linha de transmissão MANTXPIN_Direction: Direção do pino de transmissão
devem ser definidas antes de utilizar esta função.
Exemplo
/ / Inicializar do transmissor: sbit MANTXPIN em RC1_bit; sbit MANTXPIN_Direction em TRISC1_bit; ... Man_Send_Init ();
Protótipo unsigned char Man_Receive (unsigned char * Erro);
Retorna Um byte ler a partir do sinal de entrada.
Descrição
A função extrai um byte a partir do sinal de entrada.
Parâmetros:
- erro: erro bandeira. Se o formato do sinal não coincide com o esperado, o erro pavilhão será definido como não-zero.
Requer Para utilizar esta função, o usuário deve preparar o MCU para o recebimento. Veja
Exemplo
unsigned char dados = 0, erro = 0; ... = dados Man_Receive (e erro); se (Erro)
{/ * Tratamento de erros /}
CAPÍTULO 7
mikroC PRO para PIC
Man_Receive
Man_Send_Init
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
361
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Man_Send (unsigned char tr_data);
Retorna Nada.
Descrição
Envia um byte.
Parâmetros:
- tr_data: dados a serem enviados
Nota: Baud taxa utilizada é de 500 bps.
Requer Para utilizar esta função, o usuário deve preparar o MCU para o envio. Veja Man_Send_Init.
Exemplo unsigned char msg; ... Man_Send (msg);
Protótipo unsigned char Man_Synchro ();
Retorna - 255 - Se a sincronização não foi bem sucedida. - Metade do comprimento de bit manchester, expressas em múltiplos de 10us - a su-
i i ã d Descrição Medidas de metade do comprimento do bit manchester com resolução 10us.
Requer Para utilizar esta função, primeiro você deve preparar o MCU para o recebimento. Veja
Exemplo
unsigned int man__half_bit_len; ... man__half_bit_len Man_Synchro = ();
CAPÍTULO 7 Bibliotecas
Man_Send
Man_Synchro
mikroC PRO para PIC
362
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Man_Break ();
Retorna Nada.
Descrição
Man_Receive está bloqueando a rotina e ele pode bloquear o fluxo do programa. Chame esse rotina de interrupção para desbloquear a execução do programa. Este mecanismo é sim- lhantes ao WDT.
Nota: As interrupções devem ser desativados antes de usar o Manchester
Requer Nada.
Exemplo
char data1, erro, contador = 0; vazio interrupção {
se (INTCON.T0IF) { se (Contador> = 20) {
Man_Break (); contador = 0; / / zerar o contador
} mais
contador + +; / / incrementa contador
INTCON.T0IF = 0; bandeira / / Limpa estouro Timer0 interrupção
} } vazio main () {
OPTION_REG = 0x04; / prescaler TMR0 / set a 1:32
...
Man_Receive_Init ();
...
/ / Tenta Man_Receive com bloqueio de mecanismo de prevenção INTCON.GIE = 1 / / Global interrupção permitir INTCON.T0IE = 1 / / Enable estouro Timer0
interrupção data1 = Man_Receive (e erro); INTCON.GIE = 0; / / Global interrupção desativar
...
}
CAPÍTULO 7
mikroC PRO para PIC
Man_Break
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
363
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca O código a seguir é o código para o receptor de Manchester, que mostra como usar o Manchester Biblioteca para recepção dos dados: / / Conexões do módulo do LCD sbit LCD_RS em RB4_bit; sbit LCD_EN em RB5_bit; sbit LCD_D4 em RB0_bit; sbit LCD_D5 em RB1_bit; sbit LCD_D6 em RB2_bit; sbit LCD_D7 em RB3_bit; sbit LCD_RS_Direction em TRISB4_bit; sbit LCD_EN_Direction em TRISB5_bit; sbit LCD_D4_Direction em TRISB0_bit; sbit LCD_D5_Direction em TRISB1_bit; sbit LCD_D6_Direction em TRISB2_bit; sbit LCD_D7_Direction em TRISB3_bit; / / Fim conexões do módulo do LCD / / Conexões Manchester módulo sbit MANRXPIN em RC0_bit; sbit MANRXPIN_Direction em TRISC0_bit; sbit MANTXPIN em RC1_bit; sbit MANTXPIN_Direction em TRISC1_bit; / / Fim módulo Manchester conexões
char erro, ErrorCount, de temperatura; vazio main () {
ErrorCount = 0; ANSEL = 0; ANSELH = 0; TRISC.F5 = 0; Lcd_Init (); Lcd_Cmd (_LCD_CLEAR);
Man_Receive_Init ();
enquanto (1) {
/ / Configurar um pinos como I / O digital / / Inicializar LCD / / Clear LCD
/ / Inicializar Receptor / / Loop infinito
Lcd_Cmd (_LCD_FIRST_ROW);
/ / Move o cursor para a linha 1
enquanto (1) {/ / Espera o "start" byte
temp = Man_Receive (& error) / / byte tenta receber se (Temp == 0x0B) / / byte "Iniciar", veja o exemplo do Transmissor
break; / / Nós temos a seqüência de partida
364 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC se (Erro)
/ / Saída para que não loop para sempre
Bibliotecas
break; }
fazer
{ temp = Man_Receive (& error) / / byte Tentativa receber se (Erro) {/ / Se o erro ocorreu
Lcd_Chr_CP ('?'); / / Escreve ponto de interrogação no LCD ErrorCount + + / / Update erro contra se (ErrorCount> 20) {/ / Em caso de vários erros
temp = Man_Synchro (); / / Tente sincronizar novamente / Man_Receive_Init / (); / Alternativa, tente ao inicializar
Receptor de novo ErrorCount = 0; / / erro Zerar contador }
} mais {/ / Nenhum erro ocorreu
se (Temp! = 0x0E) / / Se o byte "End" foi recebida (ver Transmissor exemplo)
Lcd_Chr_CP (temp) / / não escrever byte recebido em LCD }
Delay_ms (25); }
enquanto (Temp = 0x0E!); / Sair / Se byte "End" foi recebido do loop }
}
Mikroelektronika - Soluções de software e hardware para o mundo embutido
365
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
O código a seguir é o código para o transmissor de Manchester, que mostra como usar o Manchester Biblioteca de transmissão de dados: / / Conexões Manchester módulo sbit MANRXPIN em RC0_bit; sbit MANRXPIN_Direction em TRISC0_bit; sbit MANTXPIN em RC1_bit; sbit MANTXPIN_Direction em TRISC1_bit; / / Fim conexões Manchester módulo
char índice, de caráter; char s1 [] = "mikroElektronika"; vazio main () {
Man_Send_Init ();
enquanto (1) {
Man_Send (0x0B); Delay_ms (100);
/ / Inicializar transmissor / / Loop infinito / / Enviar "start" byte / / Espera por um tempo
caracter = s1 [0]; = índice 0; enquanto (Personagem) {
Man_Send (personagem); Delay_ms (90); index + +; caracter = s1 [índice]; }
/ / / / / / / / / / / / / /
Tome primeiro char da string Inicializar variável índice String termina com zero Enviar caráter Aguarde um momento Incrementar variável índice Leve o próximo caractere da string
}
}
Man_Send (0x0E); Delay_ms (1000);
/ / Enviar "fim" byte
366
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Exemplo de conexão
Conexão simples transmissor Simples Receptor conexão
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
367
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
MULTI MEDIA LIBRARY CARD O Multi Media Card (MMC) é uma memória flash padrão de cartão. cartões MMC são cur- atualmente disponível nos tamanhos até e incluindo 1 GB, e são usados em celulares, mp3 players, câmeras digitais e PDA's. mikroC PRO para PIC fornece uma biblioteca para acessar dados sobre Multi Media Card via SPI biblioteca communication.This também suporta cartões SD (Secure Digital) de memória. Secure Digital Card Secure Digital (SD) é um cartão de memória flash padrão, baseado na velha Multi Media Card (MMC) de formato. Os cartões SD estão atualmente disponíveis em tamanhos de até 2 GB, inclusive, e são usados em celulares, mp3 players, câmeras digitais, PDAs e. Notas:
- Biblioteca trabalha com a família PIC18 só; - A biblioteca utiliza o módulo de comunicação SPI. O usuário deve inicializar
SPI módulo antes de usar o SPI LCD Gráfico Biblioteca. - Para MCUs com dois módulos SPI é possível inicializar ambos e
em seguida, mudar usando o SPI_Set_Active () rotina. - Rotinas para manipulação de arquivos só podem ser utilizados com sistema de arquivos FAT16. - Funções de biblioteca criar e ler arquivos no diretório raiz só; - Funções de biblioteca popular ambas as tabelas e FAT1 FAT2 ao escrever em arquivos, mas o arquivo de dados está a ser lido da tabela FAT1 só, ou seja, não há recuperação se FAT1 tabela está corrompido.
Nota: O módulo SPI tem de ser inicializado através SPI1_Init_Advanced rotina com os seguintes parâmetros:
- - - - - - -
Mestrado SPI Modo de 8bit prescaler primária 16 Escravo Selecione deficientes dados amostrados no meio de dados em tempo de saída relógio de marcha lenta saída de dados Serial mudanças na transição do estado inativo para ativo relógio Estado relógio
SPI1_Init_Advanced (_SPI_MASTER_OSC_DIV16, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH), Deve ser chamado antes de inicializar Mmc_Init.
368
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis devem
ser definida em todos os
Descrição: Exemplo:
sbit sfr extern Mmc_Chip_Select;
Chip pinos de
l ã
sbit Mmc_Chip_Select em RC2_bit
sbit sfr extern Mmc_Chip_Select_Direction;
Direção da pinos selecionar chip
sbit Mmc_Chip_Select_Direction em TRISC2_bit;
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Nota: Uma vez o cartão MMC / SD é inicializado, o usuário poderá reinicializar SPI em maior velocidade. Veja o Mmc_Init e rotinas Mmc_Fat_Init.
As dependências externas do MMC Biblioteca
Rotinas da biblioteca
- - - - -
Mmc_Init Mmc_Read_Sector Mmc_Write_Sector Mmc_Read_Cid Mmc_Read_Csd
Rotinas para manipulação de arquivos:
- - - - - - - - - - - - -
Mmc_Fat_Init Mmc_Fat_QuickFormat Mmc_Fat_Assign Mmc_Fat_Reset Mmc_Fat_Read Mmc_Fat_Rewrite Mmc_Fat_Append Mmc_Fat_Delete Mmc_Fat_Write Mmc_Fat_Set_File_Date Mmc_Fat_Get_File_Date Mmc_Fat_Get_File_Size Mmc_Fat_Get_Swap_File
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
369
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char Mmc_Init ();
Retorna - 0 - Se o cartão SD / MMC foi detectado e inicializado com sucesso - 1 - Caso contrário
Descrição Inicializa hardware de comunicação SPI; A função retorna 1 se MMC é presentes e com sucesso inicializado, caso contrário retorna 0. Mmc_Init precisa ser chamada antes de usar outras funções deste biblioteca.
Requer
As variáveis globais:
- Mmc_Chip_Select: Chip Selecionar linha - Direção do pino de Chip Select: Mmc_Chip_Select_Direction
devem ser definidas antes de utilizar esta função.
Exemplo
/ / MMC módulo de conexões sbit sfr Mmc_Chip_Select em RC2_bit; sfr sbit Mmc_Chip_Select_Direction em TRISC2_bit; / / MMC módulo de conexões ... SPI1_Init (); = erro Mmc_Init (); / / linha de inicialização com o CS em RC2_bit
Protótipo unsigned char Mmc_Read_Sector (unsigned long sector, dbuff char *);
Retorna Retorna 0 se ler era bem sucedida, ou 1 se ocorreu um erro.
Descrição Função lê um setor (512 bytes) a partir do cartão MMC no endereço sector sector. Ler dados são armazenados na matriz de dados. A função retorna 0 se ler foi bem sucedida,
1 Requer Biblioteca precisa ser inicializado, veja Mmc_Init.
Exemplo = erro Mmc_Read_Sector (sector, dados);
CAPÍTULO 7 Bibliotecas
Mmc_Init
Mmc_Read_Sector
mikroC PRO para PIC
370
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char Mmc_Write_Sector (unsigned long sector, char * Dbuff);
Retorna Retorna 0 se escrever bem-sucedida; retorna 1 se houve erro no envio comando de escrita; retorna 2 se houve um erro na escrita.
Descrição Função grava 512 bytes de dados a MMC no endereço sector sector. A função retorna 0 se gravação foi bem sucedida, ou 1 se houver um erro no envio comando de escrita, ou 2, se houve um erro na escrita.
Requer Biblioteca precisa ser inicializado, veja Mmc_Init.
Exemplo erro: = Mmc_Write_Sector (sector, dados);
Protótipo unsigned char Mmc_Read_Csd (char data_for_registers *);
Retorna Retorna 0 se ler foi bem sucedida, ou 1 se ocorreu um erro.
Descrição Função lê registrar CSD e retorna 16 bytes de conteúdo em data_for_registers.
Requer Biblioteca precisa ser inicializado, veja Mmc_Init.
Exemplo = erro Mmc_Read_Csd (dados);
Protótipo unsigned char Mmc_Read_Cid (char data_for_registers *);
Retorna Retorna 0 se ler foi bem sucedida, ou 1 se ocorreu um erro.
Descrição Função lê registo CID e retorna 16 bytes de conteúdo em data_for_registers.
Requer Biblioteca precisa ser inicializado, veja Mmc_Init.
Exemplo = erro Mmc_Read_Cid (dados);
CAPÍTULO 7
mikroC PRO para PIC
Mmc_Write_Sector
Mmc_Read_Cid
Mmc_Read_Csd
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
371
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Mmc_Fat_Init ();
Retorna - 0 - Se o cartão SD / MMC foi detectado e inicializado com sucesso - 1 - Se o setor de inicialização FAT16 não foi encontrado - 255 - Se o cartão SD / MMC não foi detectada
Descrição Inicializa cartão SD / MMC, lê SD / MMC setor de inicialização FAT16 e extratos necessá- dados necessárias necessários para a biblioteca. N C SD / MMC d f d FAT16 i d
Requer
As variáveis globais:
- Mmc_Chip_Select: Chip Selecionar linha - Direção do pino de Chip Select: Mmc_Chip_Select_Direction
devem ser definidas antes de utilizar esta função.
O módulo de hardware adequado SPI deve ser previamente inicializada. Veja o SPI1_Init, rotinas SPI1_Init_Advanced.
Exemplo
/ / MMC módulo de conexões sbit sfr Mmc_Chip_Select em RC2_bit; sbit sfr Mmc_Chip_Select_Direction em TRISC2_bit; / / Módulo MMC conexões
/ / Inicializar SPI1 módulo e ponteiro conjunto (s) para SPI1 funções SPI1_Init_Advanced (MASTER_OSC_DIV64, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
/ / Use fat16 formatação rápida, em vez de rotina init se uma formatação é necessário se (! Mmc_Fat_Init ()) { / / Reinicializa SPI1 a uma velocidade maior SPI1_Init_Advanced (MASTER_OSC_DIV4, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH); ... }
CAPÍTULO 7 Bibliotecas
Mmc_Fat_Init
mikroC PRO para PIC
372
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char Mmc_Fat_QuickFormat (char * Mmc_fat_label);
Retorna - 0 - Se o cartão SD / MMC foi detectado e inicializado com sucesso - 1 - Se o formato FAT16 foi unseccessful - 255 - Se o cartão SD / MMC não foi detectada
Descrição
Formatos para FAT16 e inicializa cartão SD / MMC.
Parâmetros:
- mmc_fat_label: rótulo de volume (11 caracteres). Se menos de 11 ca- tros são fornecidos, o rótulo será preenchido com espaços. Se a string null é passado volume não será identificado
Nota: Esta rotina pode ser utilizado em substituição ou em conjunto com
rou-Mmc_Fat_Init tine.
Nota: Se o cartão SD / MMC já contém um setor de inicialização válido, ela
Requer A hardware apropriado módulo SPI deve ser previamente inicializada.
Exemplo
/ / Inicializar SPI1 módulo e ponteiro conjunto (s) para SPI1 funções SPI1_Init_Advanced (MASTER_OSC_DIV64, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
/ / Formato e inicializar MMC / SD cartão e MMC_FAT16 biblioteca glob- als se (! Mmc_Fat_QuickFormat (& mmc_fat_label)) {
/ / Reinicializar o módulo SPI a uma velocidade maior (principal alteração prescaler). SPI1_Init_Advanced (MASTER_OSC_DIV4, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH); ... }
CAPÍTULO 7
mikroC PRO para PIC
Mmc_Fat_QuickFormat
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
373
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Mmc_Fat_Assign (char * Nome do arquivo, char file_cre_attr);
Retorna - 1 - Se o arquivo já existe ou o arquivo não existe, mas novo arquivo é criado. - 0 - Se arquivo não existe e nenhum arquivo novo é criado.
Descrição
Atribui arquivo para operações de arquivo (ler, escrever, apagar ...). Todos os teatros arquivo subseqüente- ções será aplicado sobre o arquivo designado.
Parâmetros: - filename: nome do arquivo que deve ser atribuído para operações de arquivo. O nome do arquivo devem estar em formato DOS 8.3 (Nome_do_arquivo.extensão). O nome do arquivo e extensão será automaticamente preenchido com espaços pela biblioteca, se tiverem menos de comprimento necessária ("mikro.tx", ou seja - ". mikro tx">), assim o usuário não faz tem que tomar cuidado com isso. O nome do arquivo e extensão são maiúsculas e minúsculas. A biblioteca irá convertê-los para caso apropriado automaticamente, assim que o usuário não tem que tomar cuidado com isso. Além disso, em Para manter a compatibilidade com a primeira versão do presente biblioteca, nomes de arquivo podem ser introduzida como string em maiúsculas de 11 bytes de comprimento, com nenhum ponto caráter entre o nome do arquivo e extensão (ie "MIKROELETXT" -> MIKROELE.TXT). Neste caso 3 últimos caracteres da string são considerados arquivos extensão.
- file_cre_attr: bandeiras e criação do arquivo attributs. Cada bit corresponde
a atribuíveis arquivo apropriado:
Requer MMC / SD e MMC biblioteca deve ser inicializado para operações de arquivo. Veja Mmc_Fat_Init.
Exemplo / / Cria arquivo com atribuíveis arquivo se ele já não existe Mmc_Fat_Assign ('MIKROELE.TXT, 0xA0);
Bit Másca
Descrição 0 0x01 Leia apenas 1 0x02 Oculto 2 0x04 Sistema 3 0x08 Volume Label 4 0x10 Subdiretório 5 0x20 Arquivo 6 0x40 Dispositivo (uso interno somente, nunca encontrado
7 0x80 Arquivo bandeira criação. Se o arquivo não existe e este
sinalizador estiver definido, i ifi d á i d
CAPÍTULO 7 Bibliotecas
Mmc_Fat_Assign
mikroC PRO para PIC
374
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Mmc_Fat_Reset (unsigned long * Tamanho);
Retorna Nada.
Descrição Procedimento redefine o ponteiro do arquivo (move para o início do arquivo) do atribuído arquivo, assim que o arquivo possa ser lido.
Requer O arquivo deve ser atribuído, consulte Mmc_Fat_Assign.
Exemplo Mmc_Fat_Reset (tamanho);
Protótipo vazio Mmc_Fat_Rewrite ();
Retorna Nada.
Descrição Procedimento redefine o ponteiro do arquivo e limpa o atribuído arquivo de dados para que novos
d i i Requer O arquivo deve ser atribuído, consulte Mmc_Fat_Assign.
Exemplo Mmc_Fat_Rewrite;
Protótipo vazio Mmc_Fat_Append ();
Retorna Nada.
Descrição O processo de mover o ponteiro do arquivo para o final de o arquivo atribuídos, de modo que
d d d d i Requer O arquivo deve ser atribuído, consulte Mmc_Fat_Assign.
Exemplo Mmc_Fat_Append;
CAPÍTULO 7
mikroC PRO para PIC
Mmc_Fat_Reset
Mmc_Fat_Rewrite
Mmc_Fat_Append
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
375
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Mmc_Fat_Write (char * FData, não assinado data_len);
Retorna Nada.
Descrição Procedimento escreve um pedaço de bytes (FData) para o arquivo atualmente atribuído, no
i d i d i Requer O arquivo deve ser atribuído, consulte Mmc_Fat_Assign. Além disso, o ponteiro do
arquivo deve ser ini-
Exemplo Mmc_Fat_Write (txt, 255); Mmc_Fat_Write ('Olá mundo', 255);
Protótipo vazio Mmc_Fat_Delete ();
Retorna Nada.
Descrição Exclui atualmente atribuídos arquivo do cartão MMC / SD.
Requer MMC / SD e MMC biblioteca deve ser inicializado para operações de arquivo. Veja Mmc_Fat_Init. O arquivo deve ser atribuído anteriormente. Veja Mmc_Fat_Assign.
Exemplo / / Deletar o arquivo atual Mmc_Fat_Delete ();
Protótipo vazio Mmc_Fat_Read (unsigned short * Bdata);
Retorna Nada.
Descrição Processo lê o byte no qual o ponteiro aponta para o arquivo e armazena dados em dados de parâmetro. O ponteiro do arquivo aumenta automaticamente a cada chamada de
Requer O arquivo deve ser atribuído, consulte Mmc_Fat_Assign. Além disso, o ponteiro do
arquivo deve ser ini- Exemplo Mmc_Fat_Read (mydata);
CAPÍTULO 7 Bibliotecas
Mmc_Fat_Read
Mmc_Fat_Delete
Mmc_Fat_Write
mikroC PRO para PIC
376
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Mmc_Fat_Get_File_Date (unsigned int * Ano, unsigned short * Mês, unsigned short * Dia, unsigned short * horas, unsigned short * Min);
Retorna Nada.
Descrição Recupera a data ea hora para o arquivo selecionado. Segundos não estão sendo recuperado, uma vez que são escritas em incrementos de 2 seg.
Requer O arquivo deve ser atribuído, consulte Mmc_Fat_Assign.
Exemplo
/ / Obtém Data / hora do arquivo não assinado anos; char dat, MNTH, horas, minutos; ... nome_arquivo = "MYFILEABTXT"; Mmc_Fat_Assign (nome_arquivo); Mmc_Fat_Get_File_Date (tvh, MNTH, dat, horas, minutos);
Protótipo unsigned long Mmc_Fat_Get_File_Size ();
Retorna Esta função retorna o tamanho do arquivo ativo (em bytes).
Descrição Recupera o tamanho de arquivo atualmente selecionado.
Requer O arquivo deve ser atribuído, consulte Mmc_Fat_Assign.
Exemplo
/ / Obtém Data / hora do arquivo não assinado anos; char dat, MNTH, horas, minutos; ... file_name = "MYFILEXXTXT"; Mmc_Fat_Assign (nome_arquivo); mmc_size = Mmc_Fat_Get_File_Size;
Protótipo vazio Mmc_Fat_Set_File_Date (unsigned int ano, unsigned short mês, unsigned short dia, unsigned short horas, unsigned short minutos, unsigned short segundos);
Retorna Nada.
Descrição Grava timestamp sistema para um arquivo. Use essa rotina antes de cada gravar o arquivo; C á i i á d i d h id
Requer A arquivo deve ser atribuído, consulte Mmc_Fat_Assign. Além disso, o ponteiro do arquivo deve ser ini-
Exemplo / / 01 de abril de 2005, 18:07:00 Mmc_Fat_Set_File_Date (2005, 4, 1, 18, 7, 0);
CAPÍTULO 7
mikroC PRO para PIC
Mmc_Fat_Set_File_Date
Mmc_Fat_Get_File_Date
Mmc_Fat_Get_File_Size
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
377
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned long Mmc_Fat_Get_Swap_File (unsigned long * Sectors_cnt char nome do arquivo, char file_attr);
Retorna - Número do setor de partida para o arquivo de swap recém-criado, se não foi o suficiente
espaço livre na Cartão SD / MMC para criar arquivos de tamanho necessário. D f
Descrição
Esta função é usada para criar um arquivo de swap de pré-nome e tamanho do MMC / SD. Se um arquivo com o nome especificado já existe na mídia, pesquisa consecutivos para setores irão ignorar setores ocupados por esse arquivo. Portanto, é recomenda-se apagar o arquivo como se ele existe antes de chamar essa função. Se não for apagada e ainda há bastante espaço para novo arquivo de permuta, esta função irá apagar depois alocar espaço de memória novo para novo arquivo swap.
O objetivo do arquivo de swap é fazer com que a leitura ea escrita para a mídia SD / MMC
como rápido possível, usando o Mmc_Read_Sector () e Mmc_Write_Sector () funções diretamente, sem que possa causar danos ao sistema FAT. Trocar arquivos podem ser considerado como uma "janela" na mídia, onde o usuário pode livremente escrever / ler os dados. É objetivo principal da biblioteca mikroC é ser usado para a aquisição rápida de dados, quando a aquisição de tempo crítico tiver terminado, os dados podem ser re-escrita em um "normal" arquivo, e formatado da maneira mais adequada.
Parâmetros:
- sectors_cnt: número de setores consecutivos que o usuário quer que o arquivo
de swap para ter. - filename: nome do arquivo que deve ser atribuído para operações de arquivo. O nome do arquivo devem estar em formato DOS 8.3 (Nome_do_arquivo.extensão). O nome do arquivo e
t ã
CAPÍTULO 7 Bibliotecas
Mmc_Fat_Get_Swap_File
mikroC PRO para PIC
378
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Descrição
- file_attr: bandeiras e criação do arquivo attributs. Cada bit corresponde a apro- comeu atribuíveis ficheiro:
Bit Másca
Descrição 0 0x01 Leia apenas 1 0x02 Oculto 2 0x04 Sistema 3 0x08 Volume Label 4 0x10 Subdiretório 5 0x20 Arquivo 6 0x40 Dispositivo (uso interno somente, nunca encontrado no
7 0x80 Não utilizado
Nota: nomes de arquivo longos (LFN) não são suportados.
Requer MMC / SD e MMC biblioteca deve ser inicializado para operações de arquivo. Veja Mmc_Fat_Init.
Exemplo
//-------------- Tenta criar um arquivo de swap, cujo tamanho será no pelo menos 100 setores. / / Se for bem sucedido, ele envia o n º do setor de início mais de UART vazio M_Create_Swap_File () { size = Mmc_Fat_Get_Swap_File (100); se (Tamanho <> 0) { UART_Write (0xAA); UART_Write (Lo (tamanho)); UART_Write (Hi (tamanho)); UART_Write (Superior (tamanho)); UART_Write (Máxima (tamanho)); UART_Write (0xAA);
} }
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
379
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca O exemplo a seguir demonstra MMC teste biblioteca. Ao piscar, insira um Cartão SD / MMC para o módulo, quando deve receber a "Init-OK" mensagem. Depois, você pode experimentar com MMC ler e escrever funções e observar o resultados através do Terminal USART. / / MMC módulo de conexões sbit Mmc_Chip_Select em RC2_bit; sbit Mmc_Chip_Select_Direction em TRISC2_bit; / / Eof módulo de conexões MMC
/ / Variáveis para rotinas MMC unsigned char SectorData [512], / / Buffer para o setor MMC leitura / escrita unsigned char data_for_registers [16] / / buffer para CID e registra CSD
/ / UART1 escrever um texto e nova linha (alimentação de linha de retorno + transporte) vazio UART1_Write_Line (char * Uart_text) {
UART1_Write_Text (uart_text); UART1_Write (13); UART1_Write (10);
}
/ / Byte exibição em hexadecimal vazio PrintHex (unsigned char i) {
unsigned char oi, eis;
oi oi oi se eis se
= I & 0xF0; => Oi> 4; Oi + = '0 '; (Oi> '9 ') oi oi = 7; = (I & 0x0F) + '0 '; (Lo> '9 ') = lo lo 7;
/ / Nibble alto / / Nibble baixo
UART1_Write (oi); UART1_Write (eis);
}
vazio main () {
const char
FILL_CHAR 'm';
unsigned int i, SectorNo; char bit
mmc_error; data_ok;
ADCON1 | = 0x0F; CMCON | = 7;
/ / Inicializar UART1 módulo
/ / Configurar um pinos como digital / / Desligue comparadores
380
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
UART1_Init (19200); Delay_ms (10);
UART1_Write_Line ("PIC-Started"); / relatório da CPI presentes
/ / Inicializar módulo SPI1 SPI1_Init_Advanced (_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE,
_SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
/ / Inicializar um cartão MMC mmc_error Mmc_Init = (); if (mmc_error == 0)
UART1_Write_Line (MMC Init-OK "); / / Se o MMC apresentar relatório mais
UART1_Write_Line (MMC Init erro "); / / Se o relatório de erros
/ / Preencha buffer MMC com mesmos personagens for (i = 0; i <= 511; i + +)
SectorData [i] = FILL_CHAR;
/ / Escreve sector mmc_error = Mmc_Write_Sector (SectorNo, SectorData); if (mmc_error == 0)
UART1_Write_Line ("Escreva-OK"); mais / / Se houver erros .....
UART1_Write_Line ("Write Error");
/ / Leitura da CID registo mmc_error = Mmc_Read_Cid (data_for_registers); if (mmc_error == 0) {
UART1_Write_Text ("CID:"); for (i = 0; i <= 15; i + +)
PrintHex (data_for_registers [i]); UART1_Write_Line ("");
} mais
UART1_Write_Line (CID-erro ");
/ / Leitura da CSD registo mmc_error = Mmc_Read_Csd (data_for_registers); if (mmc_error == 0) {
UART1_Write_Text (CSD: "); for (i = 0; i <= 15; i + +)
PrintHex (data_for_registers [i]); UART1_Write_Line ("");
} mais
UART1_Write_Line (CSD erro ");
/ / Ler sector
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO 381
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
mmc_error = Mmc_Read_Sector (SectorNo, SectorData); if (mmc_error == 0) {
UART1_Write_Line ("Read-OK"); / / Os dados correspondem Chech data_ok = 1; for (i = 0; i <= 511; i + +) {
UART1_Write (SectorData [i]); se (SectorData [i]! = FILL_CHAR) {
data_ok = 0; break;
} } UART1_Write_Line (""); se (Data_ok)
UART1_Write_Line ("Content-OK"); mais
UART1_Write_Line ("Erro de conteúdo"); }
mikroC PRO para PIC
mais / / Se houver erros ..... UART1_Write_Line ("Erro de leitura");
/ / Fim do teste do Sinal UART1_Write_Line ("O Fim do teste.");
}
382
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
interface MMC MMC vista traseira
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
383
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
ONEWIRE BIBLIOTECA A biblioteca OneWire fornece rotinas para comunicação através da OneWire Dallas protocolo, por exemplo, com DS18x20 termômetro digital. OneWire é um Mestre / Escravo protocolo, e toda a comunicação cabeamento necessário é um único fio. OneWire habilitado dispositivos devem ter drivers de coletor aberto (com um único resistor de pull-up) sobre o linha compartilhada de dados. Escravo no ônibus OneWire pode até mesmo chegar a sua fonte de alimentação da linha de dados. Para datasheet detalhadas sobre o dispositivo esquemático ver. Algumas características básicas deste protocolo são:
- - - - -
sistema único mestre, baixo custo, baixas taxas de transferência (até 16 kbps), bastante longas distâncias (até 300 metros), pequenos pacotes de dados de transferência.
Cada dispositivo OneWire também tem um número de registo único de 64 bits (Dispositivo de 8 bits tipo, 48-bit número de série e de 8 bits CRC), para vários escravos podem coexistir na mesmo barramento. Note que a freqüência do oscilador FOSC precisa ser pelo menos 4MHz, a fim de utilizar o rotinas com os termômetros digitais Dallas.
Nota: Esta biblioteca implementa as atividades baseadas em tempo, assim interrupções precisam ser dis- abled quando utilizando a biblioteca OneWire.
Rotinas da biblioteca
- Ow_Reset - Ow_Read - Ow_Write
384
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Ow_Reset (unsigned short * Porto, não assinado pino curto);
Retorna 0 DS1820, se estiver presente, e 1 caso não esteja presente.
Descrição Problemas sinal de reset OneWire para DS1820. Os parâmetros da porta e especificar o pino l li d DS1820 Requer Funciona com o Dallas DS1820 sensor de temperatura apenas.
Exemplo Para repor o DS1820 que está ligado ao pino RA5:
Ow_Reset (& PORTA, 5);
Protótipo unsigned short Ow_Read (unsigned short * Porto, unsigned short pinos);
Retorna Leitura de dados de um dispositivo externo sobre o barramento OneWire.
Descrição Lê um byte de dados através do barramento OneWire.
Requer Nada.
Exemplo unsigned short tmp; ... tmp Ow_Read = (& PORTA, 5);
Protótipo vazio Ow_Write (unsigned short * Porto, unsigned short pino, não assinado curto PAR);
Retorna Nada.
Descrição Grava um byte de dados do argumento ( par), através de ônibus OneWire.
Requer Nada.
Exemplo Ow_Write (& PORTA, 5, 0xCC);
CAPÍTULO 7
mikroC PRO para PIC
Ow_Reset
Ow_Read
Ow_Write
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
385
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca Este exemplo lê a temperatura usando DS18x20 ligado ao pino PORTA.B5. Após a restauração, MCU obtém a temperatura do sensor e imprime no mostrador. Faça Certifique-se de linha de tração PORTA.B5-up e para desligar os LEDs PORTA. / / Conexões do módulo do LCD sbit LCD_RS em RB4_bit; sbit LCD_EN em RB5_bit; sbit LCD_D4 em RB0_bit; sbit LCD_D5 em RB1_bit; sbit LCD_D6 em RB2_bit; sbit LCD_D7 em RB3_bit; sbit LCD_RS_Direction em TRISB4_bit; sbit LCD_EN_Direction em TRISB5_bit; sbit LCD_D4_Direction em TRISB0_bit; sbit LCD_D5_Direction em TRISB1_bit; sbit LCD_D6_Direction em TRISB2_bit; sbit LCD_D7_Direction em TRISB3_bit; / / Fim conexões do módulo do LCD
/ / Definir TEMP_RESOLUTION a resolução correspondente de usados DS18x20 sensor: / / 18S20: 9 (configuração padrão, pode ser 9,10,11, ou 12) / / 18B20: 12 const unsigned short TEMP_RESOLUTION = 9; char * Texto = "000.0000"; não assinado temp; vazio Display_Temperature (unsigned int temp2write) {
const unsigned short RES_SHIFT TEMP_RESOLUTION = - 8; char temp_whole; unsigned int temp_fraction;
/ / Verificar se a temperatura é negativa se (Temp2write & 0x8000) {
texto [0] = '-'; temp2write temp2write = ~ + 1; }
/ / Extrair temp_whole temp_whole temp2write => RES_SHIFT;
/ / Converte para caracteres temp_whole se (Temp_whole/100)
texto [0] = temp_whole/100 + 48; mais
texto [0] = '0 ';
386
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
texto [1] =% (temp_whole/10) 10 + 48; texto [2] = temp_whole% 10 + 48;
/ / Extrair dezenas dígitos / / Extrair os dígitos
Bibliotecas
/ / Extrair temp_fraction e convertê-lo para unsigned int temp_fraction temp2write = <<(4-RES_SHIFT); temp_fraction & = 0x000F; temp_fraction *= 625; / / Converte para caracteres temp_fraction texto [4] = + temp_fraction/1000 48 / / Extrair milhares de dígitos texto [5] =% (temp_fraction/100) 10 + 48; / centenas / Extrato dígitos texto [6] =% (temp_fraction/10) 10 + 48; / dez / Extrair dígitos texto [7] =% temp_fraction 10 + 48; / os / Extrair dígitos / Temperatura / impressão em LCD Lcd_Out (2, 5, texto);
} vazio main () {
ANSEL = 0; / Configurar / AN pinos como I / O digital ANSELH = 0; Lcd_Init (); / / Inicializar LCD Lcd_Cmd (_LCD_CLEAR); / Clear LCD Lcd_Cmd (_LCD_CURSOR_OFF); / cursor Rode / off Lcd_Out (1, 1, "Temperatura:"); / / Caractere grau Print, 'C' para Centigrades Lcd_Chr (2,13,223); / LCD exibe diferentes têm diferentes características
código para o grau / / Se você ver letra grega alfa tente digitar 178 ao invés de 223
Lcd_Chr (2,14, 'C');
//--- Loop principal fazer {
//--- Realizar a leitura da temperatura Ow_Reset (& PORTA, 5); Ow_Write (& PORTA, 5, 0xCC); Ow_Write (& PORTA, 5, 0x44); Delay_us (120);
Ow_Reset (& PORTA, 5); Ow_Write (& PORTA, 5, 0xCC); Ow_Write (& PORTA, 5, 0xBE);
/ / Sinal de reset Onewire / / SKIP_ROM comando Emissão / / Emita o comando CONVERT_T
/ / SKIP_ROM comando Emissão / / Comando Emissão READ_SCRATCHPAD
temp = Ow_Read (& PORTA, 5); temp = (Ow_Read (& PORTE, 5) <<8) + temp;
//--- Format eo resultado aparecer no visor LCD Display_Temperature (temp);
Delay_ms (500);
} enquanto (1); }
Mikroelektronika - Soluções de software e hardware para o mundo embutido 387
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Conexão HW
Exemplo de conexão DS1820
mikroC PRO para PIC
388
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis deve ser definida em todos os
projetos que utilizam P t
Descrição: Exemplo:
sbit sfr extern SPExpanderRST;
linha de reposição. SPExpanderCS: sbit em P1.B1;
sbit sfr extern SPExpanderCS;
Chip linha Select. SPExpanderRST: sbit em P1.B0;
sbit sfr extern SPExpanderRST_Direction;
Direção do pino de Reset. sbit SPExpanderRST_Direction em TRISC0_bit;
sbit sfr extern SPExpanderCS_Direction;
Direção do Chip Selecione pino.
sbit SPExpanderCS_Direction em TRISC1_bit
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
PORTO BIBLIOTECA EXPANDER
A mikroC PRO para PIC fornece uma biblioteca para comunicação com o do Microchip Porto Expander MCP23S17 via interface SPI. Conexões do MCU PIC compatível e MCP23S17 é dado no esquema na parte inferior desta página.
Nota: A Biblioteca não usar a porta Expander interrupções. Nota: O hardware apropriado módulo SPI deve ser inicializada antes de usar qualquer a biblioteca de rotinas Porto Expander. Consulte a Biblioteca SPI.
As dependências externas do Porto Expander Biblioteca
Rotinas da biblioteca
- - - - - - - - - - - - - - -
Expander_Init Expander_Read_Byte Expander_Write_Byte Expander_Read_PortA Expander_Read_PortB Expander_Read_PortAB Expander_Write_PortA Expander_Write_PortB Expander_Write_PortAB Expander_Set_DirectionPortA Expander_Set_DirectionPortB Expander_Set_DirectionPortAB Expander_Set_PullUpsPortA Expander_Set_PullUpsPortB Expander_Set_PullUpsPortAB
Mikroelektronika - Soluções de software e hardware para o mundo embutido
389
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Expander_Init (char ModuleAddress);
Retorna Nada.
Descrição
Inicializa Porto Expander utilizando a comunicação SPI.
As configurações de porta Expander módulo:
- Hardware de endereçamento habilitada - Automática de endereços ponteiro de incremento (modo de byte) com deficiência - BANK_0 endereçamento de registro - Taxa de variação habilitado
Parâmetros:
- ModuleAddress: Port endereço de hardware Expander, ver esquema na final desta página
Requer
As variáveis globais:
- SPExpanderCS: Chip Selecionar linha - SPExpanderRST: linha de reset - SPExpanderCS_Direction: Direção do pino de Chip Select - SPExpanderRST_Direction: Direção do pino de Reset
devem ser definidas antes de utilizar esta função.
módulo SPI precisa ser inicializado. Veja SPI1_Init e SPI1_Init_Advanced rotinas.
Exemplo
/ / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander
...
ANSEL = 0; Configurar / / AN pinos como I / O digital ANSELH = 0;
/ / Se a porta Expander Biblioteca utiliza o módulo SPI SPI1_Init (); / / Inicializa o módulo SPI usado com PortExpander Expander_Init (0); / / Inicializar Expander Porto
CAPÍTULO 7 Bibliotecas
Expander_Init
mikroC PRO para PIC
390
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo char Expander_Read_Byte (char ModuleAddress, char RegAddress);
Retorna Byte lido.
Descrição
A função lê byte a partir de Port Expander.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, consulte esquemática na final desta página
- RegAddress: Endereço Port Expander do registo interno
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Exemplo / / Lê um byte do registo Porto expansor char read_data; ... read_data = Expander_Read_Byte (0,1);
Protótipo vazio Expander_Write_Byte (char ModuleAddress, char RegAddress, char Dados);
Retorna Nada.
Descrição
Rotina escreve um byte para Porto Expander.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, consulte esquemática na final desta página
- RegAddress: Endereço Port Expander do registo interno - Data_: dados a serem gravados
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Exemplo / / Escreve um byte para registrar o Expander do Porto Expander_Write_Byte (0,1, $ FF);
CAPÍTULO 7
mikroC PRO para PIC
Expander_Read_Byte
Expander_Write_Byte
Bibliotecas
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
391
www.mecatronicadegaragem.blogspot.com
Protótipo char Expander_Read_PortA (char ModuleAddress);
Retorna Byte lido.
Descrição
A função lê byte da Porta Porta expansor.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, ver esquema na final desta página
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Porta Porta expansor deve ser configurado como uma entrada. Veja Expander_Set_DirectionPortA e Expander_Set_DirectionPortAB rotinas.
Exemplo
/ / Ler um byte da Porta Porta expansor char read_data; ... Expander_Set_DirectionPortA (0,0 xFF); porta / expansor / set para ser introduzidas ... read_data = Expander_Read_PortA (0);
Protótipo char Expander_Read_PortB (char ModuleAddress);
Retorna Byte lido.
Descrição
A função lê bytes de PortB Porto expansor.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, ver esquema na final desta página
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
PortB Porto expansor deve ser configurado como entrada. Veja Expander_Set_Direc- tionPortB Expander_Set_DirectionPortAB e rotinas.
Exemplo
/ / Ler um byte da PORTB Porto expansor char read_data; ... Expander_Set_DirectionPortB (0,0 xFF); / expansor / set's PORTB a entrada ... read_data = Expander_Read_PortB (0);
CAPÍTULO 7 Bibliotecas
Expander_Read_PortA
Expander_Read_PortB
mikroC PRO para PIC
392
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned int Expander_Read_PortAB (char ModuleAddress);
Retorna Palavra lida.
Descrição
A função lê a palavra a partir dos portos de Porto Expander. Porta leituras estão no maior byte do resultado. leituras PortB são o byte inferior do resultado.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, consulte esquemática na final desta página
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Porta Porta Expander e PortB devem ser configurados como entradas. Veja Expander_Set_DirectionPortA, Expander_Set_DirectionPortB e Expander_Set_DirectionPortAB rotinas.
Exemplo
/ / Ler um byte da Porta Porta Expander e PORTB unsigned int read_data; ... Expander_Set_DirectionPortAB (0,0 xFFFF); porta / expansor / set's e PORTB a entrada ... read_data = Expander_Read_PortAB (0);
Protótipo vazio Expander_Write_PortA (char ModuleAddress, char Data_);
Retorna Nada.
Descrição
A função escreve byte para a Porta do Porto expansor.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, ver esquema na final desta página
- Data_: dados a serem gravados
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Porta Porta expansor deve ser configurado como saída. Veja Expander_Set_DirectionPortA Expander_Set_DirectionPortAB e rotinas.
Exemplo
/ / Escreve um byte no Porto PORTA expansor
... Expander_Set_DirectionPortA (0,0 x00); / expansor / set's porta de saída a ser ... Expander_Write_PortA (0, 0xAA);
CAPÍTULO 7
mikroC PRO para PIC
Expander_Read_PortAB
Expander_Write_PortA
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
393
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Expander_Write_PortB (char ModuleAddress, char Data_);
Retorna Nada.
Descrição
A função escreve o byte para PortB Expander do Porto.
Parâmetros:
- ModuleAddress: Porto endereço de hardware expansor, ver esquema na final desta página
- Dados: dados a serem gravados
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
PortB Porto Expander deve ser configurado como saída. Veja Expander_Set_DirectionPortB Expander_Set_DirectionPortAB e rotinas.
Exemplo
/ / Escreve um byte para PORTB Porto expansor
... Expander_Set_DirectionPortB (0,0 x00); / expansor / set's PORTB a saída ... Expander_Write_PortB (0, 0x55);
CAPÍTULO 7 Bibliotecas
Expander_Write_PortB
Expander_Write_PortAB
mikroC PRO para PIC
Protótipo
Retorna
vazio Expander_Write_PortAB (char ModuleAddress, unsigned int Data_);
Nada.
A função escreve a palavra Porto expansor portos.
Parâmetros:
Descrição - ModuleAddress: Porto endereço de hardware Expander, ver esquema na
- Dados: dados a serem gravados. Os dados a serem gravados são passados em Porta Dados da
maior de bytes. Os dados a serem gravados para PortB são passados em byte inferior de Data
Porto Expander deve ser inicializado. Veja Expander_Init.
Requer
Exemplo
Porta Porta Expander e PortB devem ser configurados como saídas. Veja Expander_Set_DirectionPortA, Expander_Set_DirectionPortB e Expander_Set_DirectionPortAB rotinas. / / Escreve um byte para PORTA Porto Expander e PORTB ... Expander_Set_DirectionPortAB (0,0 x0000); / expansor / set's Porta e PORTB a saída ... Expander_Write_PortAB (0, 0xAA55);
394
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Expander_Set_DirectionPortA (char ModuleAddress, char Data_);
Retorna Nada.
Descrição
A função define Porta Porta expansor direção.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, ver esquema na final desta página
- Dados: dados a serem gravados para o registo direção Porta. Cada bit corresponde para os pinos do registo de Porta. bit Set configura o correspon-
ding pino como entrada. bit Cleared configura o pino correspondente como uma saída.
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Exemplo / / Set Port Expander do Porta a saída Expander_Set_DirectionPortA (0,0 x00);
Protótipo vazio Expander_Set_DirectionPortB (char ModuleAddress, char Data_);
Retorna Nada.
Descrição
A função define direção Port Expander do PORTB.
Parâmetros:
- ModuleAddress: Porto hardware Expander endereço, ver esquema na final desta página
- Dados: dados a serem gravados para o registo direção PortB. Cada bit corresponde para os pinos do registo PORTB. bit Set configura o correspon-
ding pino como entrada. bit Cleared configura o pino correspondente como uma saída
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Exemplo / / PORTB Set Port Expander para ser a entrada Expander_Set_DirectionPortB (0,0 xFF);
CAPÍTULO 7
mikroC PRO para PIC
Expander_Set_DirectionPortA
Expander_Set_DirectionPortB
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
395
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Expander_Set_DirectionPortAB (char ModuleAddress, não assinado int Direção);
Retorna Nada.
Descrição
A função define Porta Porta Expander e direção PortB.
Parâmetros:
- ModuleAddress: Porto Expander endereço de hardware, ver esquema na final desta página
- Direção: dados a serem escritos aos registos direção. Dados a serem gravados para o Porta registo direção são passados em Direção de maior byte. Dados a serem por escrito à direcção PortB registo são passadas em byte inferior de Direção. Cada bit corresponde ao pino apropriado do registo Porta PortB /. bit Set configura o pino correspondente como uma entrada. bit Cleared configura o corres-
correspondente pino como saída.
Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Exemplo / / Porta Set Port Expander para ser produzido e PORTB a entrada Expander_Set_DirectionPortAB (0,0 x00FF);
Protótipo vazio Expander_Set_PullUpsPortA (char ModuleAddress, char Data_);
Retorna Nada.
Descrição
A função define Porta Porta expansora de puxar para cima / baixo resistores.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, ver esquema na final desta página
- Dados: dados para a escolha de puxar para cima / baixo configuração resistores. Cada bit
corresponde ao pino apropriado do registo Porta. bit Set permite pull-up para o pino correspondente Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Exemplo / / Porta Set Port Expander de resistores pull-up Expander_Set_PullUpsPortA (0, 0xFF);
CAPÍTULO 7 Bibliotecas
Expander_Set_DirectionPortAB
Expander_Set_PullUpsPortA
mikroC PRO para PIC
396
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Expander_Set_PullUpsPortAB (char ModuleAddress, unsigned int Pullups);
Retorna Nada.
Descrição
A função define Port expansor Porta e PortB pull up / down resistores.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, ver esquema na final desta página
- Pullups: dados para a escolha de puxar para cima / baixo configuração resistores. Porta puxe
up / down de configuração resistores é aprovada em byte de maior pullups. PortB puxe up / down de configuração resistores é passado byte inferior do pullups. Cada bit
d i i d d i t P t P tB / bit S t it Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Exemplo / / Set Port expansor PORTA e PORTB resistores pull-up Expander_Set_PullUpsPortAB (0, 0xFFFF);
Protótipo vazio Expander_Set_PullUpsPortB (char ModuleAddress, char Data_);
Retorna Nada.
Descrição
A função define PortB Porto expansor pull up / down resistores.
Parâmetros:
- ModuleAddress: Porto endereço de hardware Expander, ver esquema na final desta página
- Dados: dados para a escolha de puxar para cima / baixo configuração resistores. Cada bit
corresponde ao pino apropriado do registo PORTB. bit Set permite ll i d Requer Porto Expander deve ser inicializado. Veja Expander_Init.
Exemplo / / PORTB Set Port Expander de resistores pull-up Expander_Set_PullUpsPortB (0, 0xFF);
CAPÍTULO 7
mikroC PRO para PIC
Expander_Set_PullUpsPortB
Expander_Set_PullUpsPortAB
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
397
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca O exemplo demonstra como se comunicar com Porto Expander MCP23S17. Note que os pinos de Porto Expander A2 A1 A0 estão ligados a GND tão Port Expander Endereço de hardware é 0. / / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander
unsigned char i = 0;
vazio main () {
ANSEL = 0; ANSELH = 0; TRISB = 0;
/ / Configurar um pinos como I / O digital
/ / Set PORTB como saída
PORTB = 0xFF;
/ / Se a porta Expander Library usa SPI1 módulo SPI1_Init (); / / Inicializar SPI módulo usado com PortExpander
/ / / /
Se a porta Expander Biblioteca utiliza o módulo SPI2 SPI2_Init (); / / Inicializar SPI módulo usado com PortExpander
Expander_Init (0);
/ / Inicializar Porto Expander
Expander_Set_DirectionPortA (0, 0x00);
PORTA / Expander Set / para
ser a saída
Expander_Set_DirectionPortB (0,0 xFF); PORTB / Expander Set / para ser
Entrada Expander_Set_PullUpsPortB (0,0 xFF); / / Set pull-ups para todos os
Expansor pinos PORTB
while (1) {/ / faz um loop infinito
Expander_Write_PortA (0, i + +) / / Escreva i para expansor PORTA PORTB = Expander_Read_PortB (0); PORTB / expansor de Ler e
escrevê-lo para LEDs Delay_ms (100);
}
}
398
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
Porto Expander conexão HW
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
399
www.mecatronicadegaragem.blogspot.com
As seguintes vari- veis devem ser definidos em todos os
j t
Descrição: Exemplo:
sbit sfr extern PS2_Data;
PS / 2 linhas de dados. sbit PS2_Data em RC0_bit
sbit sfr extern PS2_Clock;
PS / 2 da linha de relógio. sbit PS2_Clock em RC1_bit;
sbit sfr extern PS2_Data_Direction;
Direcção do PS / 2 pinos de
d d
sbit PS2_Data_Direction em TRISC0_bit;
sbit sfr extern PS2_Clock_Direction;
Direcção do PS / pino do relógio
2
sbit PS2_Clock_Direction em TRISC1_bit;
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
BIBLIOTECA PS / 2 A mikroC PRO para PIC fornece uma biblioteca para comunicação com o mercado comum PS / 2 para teclado. Nota: A biblioteca não utilizar interrupções para recuperação de dados, e requer a OSCIL- lator relógio para ser pelo menos 6MHz. Nota: Os pinos para que um teclado PS / 2 está conectado deve ser ligado ao resistores pull-up. Nota: Embora o PS / 2 é um barramento de comunicação bidirecional, esta biblioteca não fornece MCU para teclado de comunicação; por exemplo, pressionando a tecla Caps Lock não liga o Caps Lock LED. As dependências externas do PS / 2 Biblioteca Rotinas da biblioteca
- Ps2_Config - Ps2_Key_Read
400
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Ps2_Config ();
Retorna Nada.
Descrição Inicializa o MCU para trabalhar com o teclado PS / 2.
Requer
As variáveis globais:
- PS2_Data: Dados linha de sinal - PS2_Clock: Relógio linha de sinal em - PS2_Data_Direction: Direção dos Dados pin - Direção do pino do relógio: PS2_Clock_Direction
devem ser definidas antes de utilizar este função.
Exemplo
sbit PS2_Data em RC0_bit; sbit PS2_Clock em RC1_bit; sbit PS2_Data_Direction em TRISC0_bit; sbit PS2_Clock_Direction em TRISC1_bit; ... Ps2_Config (); / / Init PS / 2 Keyboard
CAPÍTULO 7
mikroC PRO para PIC
Ps2_Config
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
401
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Ps2_Key_Read (unsigned short * O valor, unsigned short * Especial, unsigned short * Pressionada);
Retorna - 1 se a leitura de uma tecla do teclado foi concluído com êxito - 0 Se nenhuma tecla foi pressionada
Descrição
A função recupera informações sobre a tecla pressionada.
Parâmetros:
- valor: mantém o valor da tecla pressionada. Para caracteres, algarismos, sinais de pontuação, e no espaço valor irá armazenar o código ASCII adequados. Rotina "Reconhece" a função da tecla Shift e Caps Lock, e se comporta apropriadamente. Para teclas de funções especiais Teclas de funções especiais ver tabela.
- especiais: é uma bandeira para teclas de função especial (F1, Enter, Esc, etc.) Se a tecla pressionada
é um desses i l será definido como 1 caso contrário 0
Requer PS / 2 para teclado precisa ser inicializado. Veja Ps2_Config rotina.
Exemplo
unsigned short keyData = 0 = 0 especiais, de baixo = 0; ... / / Pressione Enter para continuar: fazer {
se (Ps2_Key_Read (& keyData, e especial, E para baixo)) { se (Down & & (keyData == 16)) break;
} } enquanto (1);
CAPÍTULO 7 Bibliotecas
Ps2_Key_Read
mikroC PRO para PIC
402
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Num Lock 29
Seta para esquerda 30
Seta para direita 31
Seta para cima 32
Seta para baixo 33
Escape 34
Tab 35
CAPÍTULO 7
mikroC PRO para PIC
Teclas de Função Especial
Bibliotecas
Key
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
Digite
Page Up
Page Down
Retrocesso
Inserir
Excluir
Windows
Ctrl
Shift
Alt
Print Screen
Pausa
Caps Lock
Fim
Início
Scroll Lock
Valor retornado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Mikroelektronika - Soluções de software e hardware para o mundo embutido 403
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca Este exemplo simples lê os valores das teclas pressionadas no teclado PS / 2 e envia-los via UART. unsigned short keyData = 0 = 0 especiais, de baixo = 0;
sbit sbit sbit
PS2_Data PS2_Clock PS2_Data_Direction
em RC0_bit; em RC1_bit; em TRISC0_bit;
sbit PS2_Clock_Direction em TRISC1_bit;
vazio main () {
ANSEL = 0; / / Configurar um pinos como I / O digital
ANSELH = 0;
UART1_Init (19200); / / Inicializa o módulo UART a 19200 bps Ps2_Config (); / / Init PS / 2 Keyboard Delay_ms (100); / / Aguarde teclado para terminar UART1_Write_Text ("Pronto");
fazer {
se (Ps2_Key_Read (& keyData, e especial, e para baixo)) { se (Down & & (keyData == 16)) {/ / Backspace
UART1_Write (0x08); } else if (Down & & (keyData == 13)) {/ / Enter
UART1_Write ('r'); / / envia o transporte voltar ao terminal USART / / Usart_Write ('n'); / / descomente esta linha se USART
terminal também espera avanço de linha / / Transição para nova linha
} else if (Baixo & &! Especiais & & keyData) {
UART1_Write (keyData); }
} Delay_ms (1); / debounce /
} enquanto (1); }
404
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
Exemplo de conexão de teclado PS2
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
405
www.mecatronicadegaragem.blogspot.com
Protótipo vazio PWM1_Init (long freq);
Retorna Nada.
Descrição
Inicializa o módulo PWM com razão de direito 0. Parâmetro freq é um PWM desejado frequência em Hz (ver dados do dispositivo folha para valores corretos em relação com FOSC).
Essa rotina deve ser chamada antes de usar outras funções de PWM Biblioteca.
Requer
MCU deve ter módulo CCP.
Nota: O cálculo do valor da freqüência de PWM é realizada pelo compilador,
como seria produzir um código relativamente grande, se feito a nível de biblioteca. Portanto o compilador precisa saber o valor do parâmetro em tempo de compilação
Exemplo Inicializar módulo PWM na 5KHz:
PWM1_Init (5000);
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
PWM BIBLIOTECA
módulo CCP está disponível com uma série de microcontroladores PIC. mikroC PRO para PIC biblioteca que fornece simplifica o uso de PWM HW Módulo.
Nota: Alguns MCUs têm vários módulos CCP. Para poder usar a rotina da biblioteca desejada CCP, basta alterar o número 1 no protótipo com o número adequado de módulo, ou seja, PWM2_Start ();
Rotinas da biblioteca
- - - -
PWM1_Init PWM1_Set_Duty PWM1_Start PWM1_Stop
PWM1_Init
406
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio PWM1_Set_Duty (unsigned short duty_ratio);
Retorna Nada.
Descrição Define a relação direito PWM. Parâmetro direito assume valores de 0 a 255, onde 0 é 0%, 127 é de 50% e 255 é a razão de 100%. Outros valores específicos para a
l d
Requer MCU deve ter módulo CCP. PWM1_Init deve ser chamado antes de utilizar esta rotina.
Exemplo Ajuste a proporção direito a 75%:
PWM1_Set_Duty (192);
Protótipo vazio PWM1_Stop (void);
Retorna Nada.
Descrição Inicia PWM.
Requer MCU deve ter módulo CCP. PWM1_Init deve ser chamada antes de usar este rou- tine. PWM1_Start deve ser chamada antes de usar essa rotina, caso contrário terá nenhum efeito como o módulo de PWM não está funcionando.
Exemplo PWM1_Stop ();
Protótipo vazio PWM1_Start (void);
Retorna Nada. Descrição Inicia PWM. Requer MCU deve ter módulo CCP. PWM1_Init deve ser chamado antes de utilizar esta rotina. Exemplo PWM1_Start ();
CAPÍTULO 7
mikroC PRO para PIC
PWM1_Set_Duty
PWM1_Start
PWM1_Stop
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
407
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca O exemplo a relação muda imposto sobre os pinos PWM RC1 e RC2 continuamente. Se o LED é ligados a estes pinos, você pode observar a mudança gradual da luz emitida. unsigned short current_duty, old_duty, current_duty1, old_duty1; vazio InitMain () {
ANSEL = 0; ANSELH = 0; PORTA = 255;
/ / Configurar um pinos como I / O digital
TRISA = 255; PORTB = 0; TRISB = 0; PORTC = 0; TRISC = 0; PWM1_Init (5000); PWM2_Init (5000);
/ / / / / / / / / / / / / /
configurar o PORTA conjunto PORTB a 0 PORTB designar conjunto PORTC a 0 PORTC designar Inicializar PWM1 Inicializar PWM2
pinos como entrada
pinos como saída pinos como saída módulo em 5KHz módulo em 5KHz
}
vazio main () {
InitMain (); current_duty = 16; current_duty1 = 16;
/ / Valor inicial para current_duty / / Valor inicial para current_duty1
PWM1_Start (); PWM2_Start (); PWM1_Set_Duty (current_duty); PWM2_Set_Duty (current_duty1);
/ / / / / / / /
início PWM1 início PWM2 Definir dever atual de PWM1 Conjunto atual dever de PWM2
enquanto (1) {/ / faz um loop infinito
se (RA0_bit) {/ / botão pressionado em RA0 Delay_ms (40); current_duty + +; / current_duty incremento / PWM1_Set_Duty (current_duty);
}
se (RA1_bit) {/ / botão de RA1 pressionado
Delay_ms (40); current_duty -; / current_duty / decremento PWM1_Set_Duty (current_duty);
}
se (RA2_bit) {/ / botão pressionado no RA2
Delay_ms (40); current_duty1 + +; / / incrementa current_duty1 PWM2_Set_Duty (current_duty1);
}
408
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC se (RA3_bit) {/ / botão de RA3 pressionado
Delay_ms (40); current_duty1 -; / / decremento current_duty1 PWM2_Set_Duty (current_duty1);
}
Bibliotecas
Delay_ms (5);
/ / Desacelerar o ritmo mudar um pouco
} }
HW Conexão
demonstração PWM
Mikroelektronika - Soluções de software e hardware para o mundo embutido
409
www.mecatronicadegaragem.blogspot.com
A variável seguinte deve ser definida em todos os pro- ECTS d RS 48
Descrição: Exemplo:
sfr extern sbit RS485_rxtx_pin;
Controle RS-485 Transmissão / recepção de operação Modo
sbit RS485_rxtx_pin em RC2_bit;
sbit sfr extern RS485_rxtx_pin_direc- ção;
Direção da RS-485 Transmissão / recepção de pinos
sbit RS485_rxtx_pin_direc- ção em TRISC2_bit;
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
BIBLIOTECA RS-485 RS-485 é uma comunicação multiponto que permite que vários dispositivos para ser conectado ed a um barramento único. A mikroC PRO para PIC fornece um conjunto de rotinas de biblioteca para trabalho confortável com RS485 sistema usando Mestre / Escravo arquitetura. Mestre e Escravo pacotes de intercâmbio de informações. Cada um destes pacotes contém bytes de sincronização, CRC byte, byte de endereço e os dados. Cada escravo tem endereço único e recebe apenas pacotes que lhe foi dirigida. O escravo não pode nunca ini- tiate comunicação. É de responsabilidade do usuário para garantir que apenas um dispositivo transmite através de 485 ônibus em um tempo. A RS-485 rotinas exigem o módulo UART. Pins da UART precisa ser anexado ao transceptor RS-485, como LTC485 ou similares (veja esquema na parte inferior desta página). Nota: A biblioteca utiliza o módulo UART para a comunicação. O usuário deve inicial- ize o módulo UART adequado antes de utilizar a Biblioteca RS-485. Para MCUs com dois módulos UART é possível inicializar ambos e depois alternar usando o UART_Set_Active função. Veja as funções UART Biblioteca. constantes Biblioteca: - START = valor de byte 150 - Valor STOP byte = 169 - Endereço 50 é o endereço de broadcast para todos (Slaves pacotes que contém o endereço 50
será recebida por todos os escravos, exceto os escravos com endereços 150 e 169). Nota: Como alguns PIC18 MCUs têm múltiplas módulos UART, UART adequado módulo deve ser inicializado. Alternando entre módulos UART UART na biblioteca é feito pela função UART_Set_Active (módulo UART tem de ser previamente ini- tialized). As dependências externas da RS-485 Biblioteca
410
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio RS485Master_Init ();
Retorna Nada.
Descrição Inicializa MCU como um Mestre de comunicação RS-485.
Requer
As variáveis globais:
RS485_rxtx_pin - Este pino é ligado à entrada DE RE / RS-485-transceiv er (ver esquema em baixo desta página). RE / controles sinal DE RS-485 transceptor modo de operação.
RS485_rxtx_pin_direction - Direção da RS-485 de transmissão / recepção do pino
devem ser definidas antes de utilizar esta função.
necessidades módulo UART HW para ser inicializado. Veja UART1_Init.
Exemplo
/ / RS485 pinagem do módulo sbit RS485_rxtx_pin_direction em RC2_bit / / transmissão / recepção controle definido para PORTC.B2
/ / Direção Pin sbit RS485_rxtx_pin_direction em TRISC2_bit / / rxtx pino di- ção definida como produção
... UART1_Init (9600); / / inicializa o módulo UART RS485Master_Init (); / intialize MCU como um mestre para RS-485 comunicação
CAPÍTULO 7
mikroC PRO para PIC
Rotinas da biblioteca
Bibliotecas
- - - - - -
RS485master_Init RS485master_Receive RS485master_Send RS485slave_Init RS485slave_Receive RS485slave_Send
RS485Master_Init
Mikroelektronika - Soluções de software e hardware para o mundo embutido
411
www.mecatronicadegaragem.blogspot.com
Protótipo vazio RS485Master_Receive (char * Data_buffer);
Retorna Nada.
Descrição
Recebe mensagens de Escravos. As mensagens são multi-byte, essa rotina deve ser chamado para cada byte recebido.
Parâmetros: - data_buffer: 7 buffer de bytes para armazenar os dados recebidos, da seguinte forma: - dados [0 .. 2]: conteúdo da mensagem - dados [3]: número de bytes de mensagens recebidas, 1-3 - dados [4]: é fixado em 255 quando a mensagem é recebida - dados [5]: é definido como 255 se o erro ocorreu - dados [6]: endereço do escravo, que enviou a mensagem
A função ajusta automaticamente dados [4] e dados [5] sobre todos os recebidos mensagem. Estas bandeiras devem ser limpos por software.
Requer MCU deve ser inicializado como um Mestre de comunicação RS-485. Veja RS485master_Init.
Exemplo char msg [8]; ... RS485Master_Receive (msg);
Protótipo vazio RS485Master_Send (char * Data_buffer, char datalen, char Slave_address);
Retorna Nada.
Descrição
Envia mensagem para Slave (s). Formato de mensagem pode ser encontrado na parte inferior desta página.
Parâmetros:
- data_buffer: dados a serem enviados - datalen: número de bytes para transmissão. Valores válidos: 0 ... 3. E ( ) d
Requer MCU deve ser inicializado como um Mestre de comunicação RS-485. Veja RS485Master_Init. É de responsabilidade do usuário para garantir (por protocolo) que apenas um dispositivo envia d d t é d 485 ô ib t
Exemplo char msg [8]; ... / / Envia 3 bytes de dados para Escravo com endereço 0x12 RS485Master_Send (msg, 3, 0x12);
CAPÍTULO 7 Bibliotecas
RS485Master_Receive
RS485Master_Send
mikroC PRO para PIC
412
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio RS485Slave_Init (char Slave_address);
Retorna Nada.
Descrição
Inicializa MCU como um escravo para comunicação RS-485.
Parâmetros:
- slave_address: Endereço do escravo
Requer
As variáveis globais:
RS485_rxtx_pin - Este pino é ligado à entrada DE RE / RS-485-transceiv er (ver esquema no final desta página). RE / controles sinal DE RS-485 transceptor modo de operação. Valores válidos: 1 (Para transmissão) e 0 (Para rece- ing)
RS485_rxtx_pin_direction - Direção da RS-485 de transmissão / recepção do pino
devem ser definidas antes de utilizar esta função.
UART módulo HW precisa ser inicializado. Veja UART1_Init.
Exemplo
/ / Pinagem do módulo RS485 sbit RS485_rxtx_pin em RC2_bit / / transmissão / recepção de controle definido para PORTC.B2
/ / Direção Pin sbit RS485_rxtx_pin_direction em TRISC2_bit / / rxtx pino di- ção definida como produção
... UART1_Init (9600); / / inicializa o módulo UART RS485Slave_Init (160); / intialize MCU como um Escravo para comunicação RS-485 com o endereço 160
CAPÍTULO 7
mikroC PRO para PIC
RS485slave_Init
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
413
www.mecatronicadegaragem.blogspot.com
Protótipo vazio RS485Slave_Receive (char * Data_buffer);
Retorna Nada.
Descrição
Recebe mensagens de Mestre. Se Escravo endereço e campo Mensagem endereço não correspondem, em seguida, a mensagem será descartada. As mensagens são multi-byte, de modo que este rotina deve ser chamado para cada byte recebido.
Parâmetros:
- data_buffer: 6 buffer de bytes para armazenar os dados recebidos, da seguinte forma: - dados [0 .. 2]: conteúdo da mensagem - dados [3]: número de bytes de mensagens recebidas, 1-3 - dados [4]: é fixado em 255 quando a mensagem é recebida - dados [5]: é fixados em 255 se o erro ocorreu
A função ajusta automaticamente d d [4] e d d [5] sobre todos os recebidos Requer MCU deve ser inicializado como um escravo para comunicação RS-485. Veja
RS485slave_Init.
Exemplo char msg [8]; ... RS485Slave_Read (msg);
CAPÍTULO 7 Bibliotecas
RS485slave_Receive
mikroC PRO para PIC
414
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio RS485Slave_Send (char * Data_buffer, char datalen);
Retorna Nada.
Descrição
Envia uma mensagem para Master. Formato de mensagem pode ser encontrado na parte inferior desta página.
Parâmetros:
- data_buffer: dados a serem enviados ú d b t t i ã V l álid 0 3
Requer MCU deve ser inicializado como um escravo para comunicação RS-485. Veja RS485slave_Init. É de responsabilidade do usuário para garantir (por protocolo) que só um dispositivo envia dados por meio de 485 ônibus em um tempo.
Exemplo char msg [8]; ... / / Envia dois bytes de dados para o Mestre RS485Slave_Send (msg, 2);
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
RS485slave_Send
Exemplo Biblioteca
Esta é uma simples demonstração de RS485 Biblioteca rotinas de uso.
Master envia mensagem para Slave com o endereço 160 e aguarda uma resposta. O escravo aceita dados, incrementa e envia de volta para o Mestre. Mestre em seguida, faz o mesmo e envia incre- dados documentados de volta ao escravo, etc
Master exibe os dados recebidos em PORTB, enquanto o erro de receber (0xAA) e número de conse- comerciais e executivas tentativas mal sucedidas são exibidos na PORTD. exibe Escravo recebeu dados sobre PORTB, enquanto que o erro na recepção (0xAA) é exibido no PORTD. configurações de hardware, neste exemplo são feitas para o conselho EasyPIC5 e 16F887.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
415
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
RS485 código mestre:
mikroC PRO para PIC
char dat [10]; char i, j;
/ / Buffer para receving / envio de mensagens
sbit
rs485_rxtx_pin
em RC2_bit / / pino conjunto transcieve
sbit rs485_rxtx_pin_direction em TRISC2_bit / / pino conjunto transcieve direção
/ / Rotina de interrupção void interrupt () {
RS485Master_Receive (DAT); }
vazio main () {
tempo cnt = 0;
ANSEL = 0; ANSELH = 0;
/ / Configurar um pinos como I / O digital
PORTB PORTD TRISB TRISD
= = = =
0; 0; 0; 0;
UART1_Init (9600); Delay_ms (100);
RS485Master_Init (); dat [0] = 0xAA; dat [1] = 0xF0; dat [2] = 0x0F; dat [4] = 0; dat [5] = 0;
/ / inicializar o módulo UART1 / / Inicializa MCU como Mestre / / Garantir que a mensagem recebida bandeira é 0 / / Garantir que a bandeira de erro é de 0
dat [6] = 0;
RS485Master_Send (DAT, 1160);
PIE1.RCIE = 1; PIE2.TXIE = 0; INTCON.PEIE = 1; INTCON.GIE = 1;
/ / / / / / / /
permitir interrupção no UART1 receber desabilitar interrupção na transmissão UART1 habilitar interrupções periféricas habilitar todas as interrupções
enquanto (1) {
/ / sobre concluída mensagem válida receber / / Dados [4] está situado a 255
cnt + +;
416
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
se (Dat [5]) {/ / se um erro detectado, o sinal que ele PORTD 0xAA = / / definindo portd para 0xAA
} se (Dat [4]) {/ / se a mensagem recebida com sucesso
cnt = 0; dat [4] = 0; / / Mensagem clara recebeu bandeira j = dat [3]; para (I = 1; i <= dat [3]; i + +) {/ / dados mostram a PORTB
PORTB = dat [i-1]; } / / Incremento recebeu dat [0] dat [0] = dat [0] 1 / / envia para o mestre Delay_ms (1); RS485Master_Send (DAT, 1160);
}
se (> Cnt 100000) { PORTD + +; cnt = 0; RS485Master_Send (DAT, 1160); se (PORTD> 10) / / se o envio falhou 10 vezes
RS485Master_Send (DAT, 1,50); / / envia mensagem em broadcast endereço
} }
/ / Função para ser devidamente ligados. }
RS485 código Slave:
char dat [9]; char i, j;
/ / Buffer para receving / envio de mensagens
sbit sbit
rs485_rxtx_pin em RC2_bit / / pino conjunto transcieve rs485_rxtx_pin_direction em TRISC2_bit / / pino conjunto transcieve
direção
/ / Rotina de interrupção void interrupt () { RS485Slave_Receive (DAT);
}
vazio main () {
ANSEL = 0; ANSELH = 0;
/ / Configurar um pinos como I / O digital
PORTB PORTD TRISB TRISD
= = = =
0; 0; 0; 0;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
417
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
UART1_Init (9600); Delay_ms (100); RS485Slave_Init (160);
dat [4] = 0; dat [5] = 0; dat [6] = 0;
PIE1.RCIE = 1; PIE2.TXIE = 0; INTCON.PEIE = 1; INTCON.GIE = 1;
mikroC PRO para PIC
/ / Inicializa UART1 módulo
/ / MCU Intialize como escravo, o endereço 160
/ / Assegura que essa bandeira mensagem recebida é de 0 / / Garantir que a mensagem recebida bandeira é 0 / / Garantir que a bandeira de erro é de 0
/ / Permitir interrupção no UART1 receber
/ / Desativar interrupção na transmissão UART1 / / Habilitar interrupções periféricas / / Habilitar todas as interrupções
enquanto (1) {
se (Dat [5]) {/ / se um erro detectado, o sinal pelo PORTD 0xAA = / / configuração portd para 0xAA dat [5] = 0;
} se (Dat [4]) {/ / após concluída mensagem válida receber
dat [4] = 0; / / dados [4] é definido como 0xFF j = dat [3]; para (I = 1; i <= dat [3]; i + +) {
PORTB = dat [i-1]; } dat [0] = dat [0] 1 / / incremento recebeu dat [0] Delay_ms (1); RS485Slave_Send (dat, 1) / / e enviá-lo para o mestre
} }
}
418
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
Exemplo de interface PC para 8051 MCU via rede RS485 com LTC485 como Transceptor RS-485
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido 419
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Mensagem cálculos formato e CRC Q: Como é CRC checksum calculado sobre RS485 lado Mestre? START_BYTE = 0x96 / / 10010110 STOP_BYTE 0xa9 = / / 10101001
PACOTE: -------- START_BYTE 0x96 ENDEREÇO Datalen
mikroC PRO para PIC
[DATA1] [DATA2] [Data3]
/ / Se existe / / Se existe / / Se existe
CRC STOP_BYTE 0xa9
bits datalen ------------ bit7 = 1 mestre envia
0 escravo envia bit6 = 1 endereço foi XORed com 1, foi igual STOP_BYTE
0 endereço INALTERADO bit5 = 0 FIXO bit4 = 1 data3 (se existir) WS XORed com 1, START_BYTE ou STOP_BYTE
0 data3 (caso exista) inalterado Bit3 = 1 DATA2 (se existir) WS XORed com 1, START_BYTE ou STOP_BYTE
0 DATA2 (caso exista) inalterado bit2 DATA1 = 1 (se existir) WS XORed com 1,
A START_BYTE ou Foi igual a Foi igual a Foi igual A
START_BYTE ou STOP_BYTE 0 DATA1 (caso exista) inalterado
bit1bit0 = 0 a 3 número de bytes de dados ENVIAR
geração de CRC: ---------------- crc_send = Endereço ^ datalen; ^ Crc_send = dados [0]; / / se existe ^ Crc_send = dados [1]; / / se existe ^ Crc_send = dados [2] / / se existir crc_send = ~ crc_send; if ((crc_send == START_BYTE) | | (crc_send == STOP_BYTE))
crc_send + +;
Datalen <4 .. 0> pode NOTA:
não
ter
o
START_BYTE <4 .. 0>
ou
STOP_BYTE <4 .. 0> valores.
420
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis deve ser definida em todos os
projetos que utilizam Software
Descrição: Exemplo:
sbit extern Soft_I2C_Scl; Soft I2C linha do
sbit Soft_I2C_Scl em RC3_bit;
sbit extern Soft_I2C_Sda; Soft I2C linha de dados. sbit Soft_I2C_Sda em RC4_bit;
sbit extern Soft_I2C_Scl_Direction;
Direção da Soft I2C pino do relógio.
sbit Soft_I2C_Scl_Direction em TRISC3_bit;
sbit extern Soft_I2C_Sda_Direction;
Direção da Soft Dados I2C pino.
sbit Soft_I2C_Sda_Direction em TRISC4_bit;
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
SOFTWARE DE BIBLIOTECA I ² C
A mikroC PRO para PIC fornece rotinas para a execução Software comunicação I2C- cação. Estas rotinas são independentes de hardware e pode ser usado com qualquer MCU. O Software biblioteca I2C permite que você use MCU como mestre em comunicação I2C. O modo multi-mestre não é suportado.
Nota: Esta biblioteca implementa as atividades baseadas em tempo, assim interrupções precisam ser dis- abled ao usar Software I2C.
Nota: Todas as funções do software I2C Biblioteca estão bloqueando chamadas funções (eles estão esperando para I2C linha do relógio para se tornar uma lógica).
Nota: Os pinos utilizados para a comunicação I2C Software deve ser ligado ao os resistores de pull-up. Desligar os LEDs ligados a estes pinos também podem ser necessário.
das dependências externas de Soft_I2C Biblioteca
Rotinas da biblioteca
- - - - - -
Soft_I2C_Init Soft_I2C_Start Soft_I2C_Read Soft_I2C_Write Soft_I2C_Stop Soft_I2C_Break
Mikroelektronika - Soluções de software e hardware para o mundo embutido 421
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Soft_I2C_Init ();
Retorna Nada.
Descrição Configura o software I ˛ Módulo C.
Requer
As variáveis globais:
- Soft_I2C_Scl: Soft I ˛ linha do relógio C - Soft_I2C_Sda: Soft I ˛ C linha de dados - Soft_I2C_Scl_Pin_Direction: Direção da Soft I ˛ pino do relógio C - Soft_I2C_Sda_Pin_Direction: Direção da Soft Eu dados ˛ pino C
devem ser definidas antes de utilizar esta função.
Exemplo
/ / Software conexões I2C sbit Soft_I2C_Scl em RC3_bit; sbit Soft_I2C_Sda em RC4_bit; sbit Soft_I2C_Scl_Direction em TRISC3_bit; sbit Soft_I2C_Sda_Direction em TRISC4_bit; / / Fim Software conexões I2C
... Soft_I2C_Init ();
Protótipo vazio Soft_I2C_Start (void);
Retorna Nada.
Descrição Determina se o barramento I2C é gratuito e as questões START.
Requer Software I2C deve ser configurado antes de usar esta função. Veja Soft_I2C_Init rotina.
Exemplo / / Problema START Soft_I2C_Start ();
CAPÍTULO 7 Bibliotecas
Soft_I2C_Init
Soft_I2C_Start
mikroC PRO para PIC
422
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Soft_I2C_Write (unsigned data_ curto);
Retorna - 0 se não houvesse erros. - 1 se escrever colisão foi detectada no barramento C ˛.
Descrição
Envia dados byte através do barramento C ˛.
Parâmetros:
- Dados: dados a serem enviados
Requer Soft I ˛ C deve ser configurado antes de usar esta função. Veja Soft_I2C_Init rotina. Além disso, START deve ser emitido, a fim de utilizar esta função. Veja Soft_I2C_Start rotina.
Exemplo unsigned short dados, o erro; ... = erro Soft_I2C_Write (dados); = erro Soft_I2C_Write (0xA3);
Protótipo unsigned short Soft_I2C_Read (unsigned int ack);
Retorna Um byte a partir do escravo.
Descrição
Lê um byte a partir do escravo.
Parâmetros:
- Ack: reconhecer parâmetro de sinal. Se o ack 0 == não reconhecer sinal será enviado após a leitura, caso contrário o reconhecer sinal será enviada.
Requer Soft I ˛ C deve ser configurado antes de usar esta função. Veja rotina Soft_I2C_Init. Além disso, START deve ser emitido, a fim de utilizar esta função. Veja Soft_I2C_Start rotina.
Exemplo unsigned short ter; ... / / Ler os dados e enviar o not_acknowledge sinal ter = Soft_I2C_Read (0);
CAPÍTULO 7
mikroC PRO para PIC
Soft_I2C_Read
Soft_I2C_Write
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
423
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Soft_I2C_Break (void);
Retorna Nada.
Descrição
Todas as funções do software I2C Biblioteca pode bloquear o programa fluxo (ver nota no topo desta página). Chamar essa rotina de interrupção irá desbloquear o programa de execu- ção. Este mecanismo é similar ao TSH.
Requer Nada.
Exemplo
/ / Software conexões I2C sbit Soft_I2C_Scl em RC0_bit; sbit Soft_I2C_Sda em RC1_bit; sbit Soft_I2C_Scl_Direction em TRISC0_bit; sbit Soft_I2C_Sda_Direction em TRISC1_bit; / / Fim Software conexões I2C
char contador = 0;
vazio interrupção {
se (INTCON.T0IF) { se (Contador> = 20) {
Soft_I2C_Break (); contador = 0; / / zerar o contador
} mais
contador + +; / / incrementa contador
INTCON.T0IF = 0; bandeira / / Limpa estouro Timer0 interrupção
Protótipo vazio Soft_I2C_Stop (void);
Retorna Nada.
Descrição Problemas de sinal STOP.
Requer Soft I2C deve ser configurado antes de usar esta função. Veja rotina Soft_I2C_Init.
Exemplo / / Problema de sinal STOP Soft_I2C_Stop ();
CAPÍTULO 7 Bibliotecas
Soft_I2C_Stop
Soft_I2C_Break
mikroC PRO para PIC
424
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
}
}
vazio main () {
OPTION_REG = 0x04;
/ / Prescaler TMR0 definir a 1:32
Bibliotecas
Exemplo
...
/ / Tenta Soft_I2C_Init com bloqueio de mecanismo de prevenção INTCON.GIE = 1 / / Global interrupt enable INTCON.T0IE = 1; / estouro Timer0 Habilitar interrupção Soft_I2C_Init (); INTCON.GIE = 0; / / Global interrupção desativar
...
}
Exemplo Biblioteca O exemplo demonstra Software I ˛ Biblioteca C rotinas de uso. O PIC MCU é conectado (SCL, SDA pinos) para PCF8583 RTC (relógio de tempo real). Programa lê data e tempo são lidos a partir do RTC e imprime na tela LCD.
char segundos, minutos, horas, dia, mês, ano; variáveis
/ / Software conexões I2C
/ Data / Global / hora
sbit Soft_I2C_Scl sbit Soft_I2C_Sda
em RC3_bit; em RC4_bit;
sbit Soft_I2C_Scl_Direction em TRISC3_bit; sbit Soft_I2C_Sda_Direction em TRISC4_bit; / / Fim Software conexões I2C
/ / Conexões do módulo do LCD sbit LCD_RS em RB4_bit; sbit LCD_EN em RB5_bit; sbit LCD_D4 em RB0_bit; sbit LCD_D5 em RB1_bit; sbit LCD_D6 em RB2_bit; sbit LCD_D7 em RB3_bit;
sbit LCD_RS_Direction em TRISB4_bit; sbit LCD_EN_Direction em TRISB5_bit; sbit LCD_D4_Direction em TRISB0_bit;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
425
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
sbit LCD_D5_Direction em TRISB1_bit; sbit LCD_D6_Direction em TRISB2_bit; sbit LCD_D7_Direction em TRISB3_bit; / / Fim conexões do módulo do LCD
//--------------------- Lê a data ea hora da RTC (PCF8583) vazio Read_Time () {
Soft_I2C_Start (); Soft_I2C_Write (0xA0); Soft_I2C_Write (2); Soft_I2C_Start (); Soft_I2C_Write (0xA1);
/ / / / / / / / / /
Emissão sinal de partida Endereço PCF8583, ver ficha PCF8583 Início de endereço 2 Emissão repetidas sinal de partida Endereço PCF8583 para leitura R / W = 1
= segundos Soft_I2C_Read (1); Soft_I2C_Read minutos = (1); horas = Soft_I2C_Read (1); dia Soft_I2C_Read = (1); = mês Soft_I2C_Read (0); Soft_I2C_Stop ();
/ / / / / / / / / / / /
Leia segundo byte Leia minutos byte Leia horas byte Leia anos / byte dia Leia semana / mês byte Emissão de sinal de paragem
}
//-------------------- Formatos de data e hora vazio Transform_Time () {
segundos = ((segundo e 0xF0)>> 4) * 10 + (segundo & 0x0F); segundo Transform
minutos = ((minutos e 0xF0)>> 4) * 10 + (minutos & 0x0F); Transforme meses
horas = ((horas & 0xF0)>> 4) * 10 + (horas & 0x0F); Transforme horas
ano = (Dia & 0xC0)>> 6; Transforme anos
dia = ((dia & 0x30)>> 4) * 10 + (dia & 0x0F); Transforme dia
mês = * ((mes & 0x10)>> 4) 10 + (mes & 0x0F);
/ /
/ / / / / / / / / /
Transforme meses }
//-------------------- valores de saída para LCD vazio Display_Time () {
Lcd_Chr (1, 6, (dia / 10) + 48); / dez / Imprimir dígitos do dia
variável Lcd_Chr (1, 7, (dia 10%) + 48) / / oness Imprimir dígitos do dia
variável Lcd_Chr (1, 9, (mês / 10) + 48); Lcd_Chr (1,10 (% de 10 meses) + 48); Lcd_Chr (1,15, + 56 anos); / ano impressão / vaiable + 8
426 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
(Início do ano 2008)
Bibliotecas
Lcd_Chr (2, 6, Lcd_Chr (2, 7, Lcd_Chr (2, 9, Lcd_Chr (2,10, Lcd_Chr (2,12, Lcd_Chr (2,13,
(Horas / (% Horas (Minutos (Minutos (Segundo (Segundo
10) 10) / 10) 10%) / 10) 10%)
+ +
+ + + +
48); 48); 48); 48); 48); 48);
}
//------------------ Init executa projetos em todo vazio Init_Main () {
TRISB = 0; PORTB = 0xFF; TRISB = 0xff; ANSEL = 0; / Configurar / AN pinos como I / O digital ANSELH = 0; Soft_I2C_Init (); / / Inicializar Soft comunicação I2C Lcd_Init (); / / Inicializar LCD Lcd_Cmd (_LCD_CLEAR); / Clear LCD Lcd_Cmd (_LCD_CURSOR_OFF); / cursor Rode / off
Lcd_Out (1,1, "Data:");
/ / Preparar e saída de texto estático no LCD
Lcd_Chr (1,8 ,':'); Lcd_Chr (1,11 ,':'); Lcd_Out (2,1, "Time"); Lcd_Chr (2,8 ,':'); Lcd_Chr (2,11 ,':'); Lcd_Out (1,12, "200");
}
//----------------- Principal procedimento vazio main () {
Delay_ms (2000);
Init_Main ();
/ / Realizar a inicialização
enquanto (1) {
Read_Time (); Transform_Time (); Display_Time ();
/ / / / / / / /
loop infinito Leia o tempo de RTC (PCF8583) Formato de data e hora Preparar e aparecer no visor LCD
}
}
Delay_ms (1000);
/ / Espera um segundo
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
427
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis deve ser definida em todos os
projetos que utilizam S ft
Descrição: Exemplo:
sbit sfr extern SoftSpi_SDI;
Dados em linha. sbit SoftSpi_SDI em RC4_bit;
sbit sfr extern SoftSpi_SDO;
Dados da linha de saída. sbit SoftSpi_SDO em RC5_bit;
sbit sfr extern SoftSpi_CLK;
linha do Relógio. sbit SoftSpi_CLK em RC3_bit;
sbit sfr extern SoftSpi_SDI_Direction;
Direção dos dados no pino. sbit SoftSpi_SDI_Direction em TRISC4_bit;
sbit sfr extern SoftSpi_SDO_Direction;
Direção da Saída de Dados do
pino
sbit SoftSpi_SDO_Direction em TRISC5_bit;
sbit sfr extern SoftSpi_CLK_Direction;
Direção do pino do relógio. sbit SoftSpi_CLK_Direction em TRISC3_bit;
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Software Library SPI A mikroC PRO para PIC fornece rotinas para a execução Software comunicação SPI- cação. Estas rotinas são independentes de hardware e pode ser usado com qualquer MCU. O SPI Software Library fornece uma fácil comunicação com outros dispositivos através da SPI: Conversores A / D e D / A conversores, MAX7219 LTC1290, etc Biblioteca de configuração:
- - - - - -
SPI modo Master Relógio valor = 20 kHz. Dados amostrados no meio do intervalo. Relógio de baixo estado ocioso. Dados amostrados no meio do intervalo. Os dados transmitidos em baixa para a borda alta.
Nota: O software da Biblioteca SPI implementa atividades baseadas em tempo, por isso interrompe necessidade ser desativado quando usá-lo.
As dependências externas de software SPI Biblioteca
428
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Soft_SPI_Init ();
Retorna Nada.
Descrição Configura e inicializa o software SPI módulo.
Requer
As variáveis globais:
- Chip_Select: Chip Selecionar linha - SoftSpi_SDI: Dados em linha - SoftSpi_SDO: Os dados de saída de linha - SoftSpi_CLK: Dados da linha de relógio - Chip_Select_Direction: Direção do pino de Chip Select - SoftSpi_SDI_Direction: Direção do Dados em pino - SoftSpi_SDO_Direction: Direção da Saída de dados pino - SoftSpi_CLK_Direction: Direção do pino do relógio de dados
devem ser definidas antes de utilizar esta função.
Exemplo
/ / Software conexões SPI módulo sbit Chip_Select em RC0_bit; sbit SoftSpi_SDI em RC4_bit; sbit SoftSpi_SDO em RC5_bit; sbit SoftSpi_CLK em RC3_bit;
sbit Chip_Select_Direction em TRISC0_bit; sbit SoftSpi_SDI_Direction em TRISC4_bit; sbit SoftSpi_SDO_Direction em TRISC5_bit; sbit SoftSpi_CLK_Direction em TRISC3_bit; / / Fim Software conexões SPI módulo ... Soft_SPI_Init (); / Soft_SPI Init /
CAPÍTULO 7
mikroC PRO para PIC
Rotinas da biblioteca
- Soft_Spi_Init - Soft_Spi_Read - Soft_Spi_Write
Soft_Spi_Init
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
429
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Soft_SPI_Read (char sdata);
Retorna Byte recebido através do barramento SPI.
Descrição
Esta rotina executa três operações simultaneamente. Ele fornece o relógio para a Soft- barramento SPI ware, lê um byte e envia um byte.
Parâmetros:
d t d d i d Requer Soft SPI deve ser inicializada antes de usar esta função. Veja Soft_SPI_Init rotina.
Exemplo
unsigned short data_read; data_send char; ... / / Ler um byte e atribuí-lo a data_read variável / / (Byte data_send será enviado via SPI durante a operação de leitura ção) data_read = Soft_SPI_Read (data_send);
Protótipo vazio Soft_SPI_Write (char sdata);
Retorna Nada.
Descrição
Esta rotina envia um byte através do barramento SPI Software.
Parâmetros:
sdata: dados a serem enviados.
Requer Soft SPI deve ser inicializada antes de usar esta função. Veja rotina Soft_SPI_Init.
Exemplo / / Escreve um byte no barramento SPI Soft Soft_SPI_Write (0xAA);
CAPÍTULO 7 Bibliotecas
Soft_Spi_Read
Soft_SPI_Write
mikroC PRO para PIC
430
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Exemplo Biblioteca
Este código demonstra o uso de rotinas de biblioteca para a comunicação Soft_SPI. Além disso, Este exemplo demonstra a trabalhar com MCP4921 da Microchip 12-bit D / A converter- er.
/ / Módulo de conexões DAC sbit Chip_Select em RC0_bit; sbit SoftSpi_CLK em RC3_bit; sbit SoftSpi_SDI em RC4_bit; sbit SoftSpi_SDO em RC5_bit;
sbit Chip_Select_Direction em sbit SoftSpi_CLK_Direction em sbit SoftSpi_SDI_Direction em sbit SoftSpi_SDO_Direction em / / Fim módulo conexões DAC
unsigned int valor;
vazio InitMain () {
TRISC0_bit; TRISC3_bit; TRISC4_bit; TRISC5_bit;
TRISB0_bit = 1; TRISB1_bit = 1; Chip_Select = 1; Chip_Select_Direction = 0; Soft_SPI_Init ();
/ / / / / / / / / /
Definir como entrada pino RA0 Definir como entrada pino RA1 Desmarque DAC Definir CS # pino como saída Inicializar Soft_SPI
}
/ / Incrementa DAC (0 .. 4095) -> tensão de saída (0 .. Vref) vazio DAC_Output (unsigned int valueDAC) {
char temp;
Chip_Select = 0;
/ / Seleciona chip DAC
/ / Envia Byte alta temp = (valueDAC>> 8) & 0x0F; / Loja valueDAC [11 .. 8] para temp [3 .. 0] temp | = 0x30 / / Definir configuração DAC, consulte MCP4921 datasheet Soft_SPI_Write (temp) / / Envia o byte mais alto via Soft SPI
/ / Envia Byte Low temp = valueDAC; Soft_SPI_Write (temp);
Chip_Select = 1;
}
vazio main () {
/ / Loja valueDAC [7 .. 0] para temp [7 .. 0] / / Envia byte baixo via Soft SPI
/ / Deseleccionar chip DAC
ANSEL
= 0;
/ / Desliga entradas analógicas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
431
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
ANSELH = 0;
mikroC PRO para PIC
InitMain ();
value = 2048;
/ / Realizar a inicialização principal / / Quando iniciar o programa, o DAC dá / / Saída no mid-range
enquanto (1) {
se ((RA0_bit) & & (valor < 4095)) {
valor + +; }
mais { se ((RA1_bit) & & (valor> 0)) {
valor -; }
}
/ / Loop infinito / / Se o botão for pressionado RA0 / Valor do incremento / / / Se RA1 botão é pressionado / Valor / decremento
}
}
DAC_Output (valor); Delay_ms (1);
/ / Enviar valor para chip DAC / Devagar ritmo de repetição das teclas
432
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Software Library UART
A mikroC PRO para PIC fornece rotinas para a execução do software UART com- de comunicação. Estas rotinas são independentes de hardware e pode ser usado com qualquer MCU. O UART Software Library fornece uma fácil comunicação com outros dispositivos através do protocolo RS232.
Nota: O Software biblioteca UART implementa atividades baseadas em tempo, de modo interrupções precisa ser desativado quando usá-lo.
Rotinas da biblioteca
- - - -
Soft_Uart_Init Soft_Uart_Read Soft_Uart_Write Soft_Uart_Break
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
433
www.mecatronicadegaragem.blogspot.com
Protótipo char Soft_UART_Init (char * Porto, char rx_pin, char tx_pin, unsigned long baud_rate, char invertido);
Retorna - 2 - Taxa de erro, solicitou transmissão é muito baixa - 1 - Taxa de erro, solicitou transmissão é muito alta - 0 - Inicialização bem-sucedida
Descrição
Configura e inicializa o software do módulo UART.
Parâmetros:
- port: porta a ser utilizado. - rx_pin: define rx_pin a ser utilizado. - tx_pin: define tx_pin a ser utilizado. - baud_rate: taxa de transmissão a ser definido. Máxima taxa de transmissão depende da MCU
relógio e as condições de trabalho. - invertida: bandeira invertida de saída. Quando definido para um valor diferente de zero, inverteu a lógica
sobre o produto é usado.
rotinas de software UART uso rotineiro Delay_Cyc. Se solicitado taxa de transmissão é
muito baixa então calculado o parâmetro para a chamada Delay_Cyc exceeeds Delay_Cyc argumento intervalo
Requer Nada.
Exemplo
Isto irá iniciar o software UART e estabelecer a comunicação em 9600 bps:
char erro; ... = erro Soft_UART_Init (& PORTC, 7, 6, 14400, 0); / / Inicializar Soft UART em 9600 bps
CAPÍTULO 7 Bibliotecas
Soft_UART_Init
mikroC PRO para PIC
434
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo char Soft_UART_Read (char * Erro);
Retorna Byte recebido via UART.
Descrição
A função recebe um byte via software UART.
Esta é uma chamada de função de bloqueio (aguarda para o bit de início).
Programador pode desbloqueá-lo por chamando rotina Soft_UART_Break.
Parâmetros:
- Erro: Erro de bandeira. Código de erro é retornado através desta
variável.
Requer Software UART deve ser inicializado antes de usar esta função. Veja o Soft_UART_Init rotina.
Exemplo
char dados, o erro; ... / / Aguardar até que os dados são recebidos fazer
= dados Soft_UART_Read (e erro); enquanto (Erro);
/ / Agora podemos trabalhar com os dados: se (Dados) {...}
CAPÍTULO 7
mikroC PRO para PIC
Soft_UART_Read
Bibliotecas
Mikroelektronika - Softwares e soluções de hardware para Embedded World
435
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Soft_UART_Break ();
Retorna Nada.
Descrição
Soft_UART_Read está bloqueando a rotina e ele pode bloquear o fluxo do programa. Chamada essa rotina da interrupção serão desbloquear a execução do programa. Este mecanis- nismo é similar ao TSH. N A i d d i d d S f UART
Requer Nada.
Exemplo
char data1, erro, contador = 0;
vazio interrupt () {
se (INTCON.T0IF) { se (Contador> = 20) { Soft_UART_Break (); contador = 0; / / zerar o contador
} mais contador + +; / / incrementa contador
INTCON.T0IF = 0; bandeira / / Limpa estouro Timer0 interrupção
} }
Protótipo vazio Soft_UART_Write (char udata);
Retorna Nada.
Descrição Esta rotina envia um byte através do barramento UART Software.
Parâmetros: - udata: dados a serem enviados.
Requer Software UART deve ser inicializada antes de usar esta função. Veja o Soft_UART_Init rotina. Esteja ciente de que Durante a transmissão, software UART é incapaz de receber dados - protocolo de transferência de dados deve ser definida de tal forma a evitar a perda
Exemplo
char some_byte = 0x0A; ... / / Escreve um byte através Soft Uart Soft_UART_Write (some_byte);
CAPÍTULO 7 Bibliotecas
Soft_UART_Write
Soft_Uart_Break
mikroC PRO para PIC
436
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
vazio main () {
OPTION_REG = 0x04;
Bibliotecas / / Prescaler TMR0 definir a 1:32
...
se (Soft_UART_Init (& PORTC, 7, 6, 9600, 0) = 0)
Soft_UART_Write (0x55);
Exemplo }
... / / Tenta Soft_UART_Read com bloqueio de mecanismo de prevenção INTCON.GIE = 1 / / Global interrupt enable INTCON.T0IE = 1; / estouro Timer0 Habilitar interrupção data1 = Soft_UART_Read (e erro); INTCON.GIE = 0; / / Global interrupção desativar
Mikroelektronika - Soluções de software e hardware para o mundo embutido
437
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca Este exemplo demonstra a troca de dados via software simples UART. Se MCU é conectado ao PC, você pode testar o exemplo o mikroC PRO para PIC USART Ferramenta Terminal.
char i, erro, byte_read;
vazio main () {
ANSEL = 0; ANSELH = 0;
/ / Variáveis auxiliares / / Configurar um pinos como I / O digital
TRISB = 0x00; PORTB = 0;
/ / Set PORTB como saída (sinalização de erro)
/ / Nenhum erro
= erro Soft_UART_Init (& PORTC, 7, 6, 14400, 0); / / Inicializar Soft
UART em 9600 bps se (Erro> 0) {
PORTB erro = / / sinalizar erro Init while (1); / programa Stop
} Delay_ms (100);
para (I = 'z', i> = 'A'; i -) {/ / Enviar bytes de 'z' downto 'A'
Soft_UART_Write (i); Delay_ms (100);
}
while (1) {/ / faz um loop infinito
byte_read = Soft_UART_Read (& error) / / byte Leia, a seguir sinalizador de erro de teste
se (Erro) / / Se o erro foi detectado PORTB erro = / / sinal que a PORTB
mais Soft_UART_Write (byte_read) / / Se o erro não foi detectado,
byte de retorno ed, leia }
}
438
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Sound_Init (char * Snd_port, char snd_pin);
Retorna Nada.
Descrição
Configura o pino MCU apropriada para a geração do som.
Parâmetros:
- snd_port: endereço da porta de saída de som - snd_pin: pino de saída de som
Requer Nada.
Exemplo / / Inicializar o RD3 pino para reprodução de som Sound_Init (& PORTD, 3);
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
BIBLIOTECA DE SOM
A mikroC PRO para PIC fornece uma biblioteca de som para fornecer aos usuários rotinas necessárias para sinalização de som em suas aplicações. Produção de som precisa hardware adicional, como piezo-falante (exemplo de interface piezo-falante é dado no esquema no final deste página).
Rotinas da biblioteca
- Sound_Init - Sound_Play
Sound_Init
Mikroelektronika - Soluções de software e hardware para o mundo embutido
439
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Sound_Play (unsigned freq_in_hz, não assinado duration_ms);
Retorna Nada.
Descrição
Gera o sinal de onda quadrada no pino adequado.
Parâmetros: - freq_in_Hz: freqüência do sinal em hertz (Hz) - duration_ms: duração do sinal em milissegundos (ms)
Nota: A faixa de freqüência é limitada pelo parâmetro Delay_Cyc. freqüência
máxima que pode ser produzido por esta função é Freq_max = FOSC / (80 * 3). fre-mínimo f üê i é i / ê i i i
Requer Para ouvir o som, você precisa de um alto-falante piezo (ou outro hardware) em des- signada porta. Além disso, você deve chamar Sound_Init preparar hardware para a saída antes usar essa função
Exemplo / Play sound / de 1KHz na duração de 100ms Sound_Play (1000, 100);
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Sound_Play
Exemplo Biblioteca
O exemplo é uma simples demonstração de como usar a biblioteca de som para tocar ing tons em um alto-falante piezo.
vazio Tone1 () { Sound_Play (659, 250);
}
vazio Tone2 () {
Sound_Play (698, 250); }
vazio Tone3 () {
Sound_Play (784, 250); }
/ / = Freqüência 659Hz, duração = 250ms / / = Freqüência 698Hz, tempo = 250ms / / = Freqüência 784Hz, tempo = 250ms
vazio Melody () {
Tone1 (); Tone2 (); Tone1 (); Tone2 (); Tone1 (); Tone2 (); Tone1 (); Tone2 (); Tone1 (); Tone2 (); Tone3 (); Tone3 ();
/ / Reproduz a "Casa Amarela" melodia
Tone3 (); Tone3 (); Tone3 (); Tone3 (); Tone3 (); Tone3 (); Tone3 (); Tone3 (); Tone2 (); Tone2 (); Tone1 ();
440
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
}
vazio ToneA () {
Sound_Play (880, 50); } vazio Tonec () {
Sound_Play (1046, 50); } vazio Tonee () {
Sound_Play (1318, 50); }
vazio Melody2 () {
unsigned short i; para (I = 9; i> 0, i -) {
ToneA (); Tonec (); tonee (); }
}
vazio main () {
Bibliotecas
}
ANSEL = 0; ANSELH = 0; TRISB 0xF8 =; TRISD 0xF7 =;
Sound_Init (& PORTD, 3); Sound_Play (1000, 1000);
enquanto (1) {
se (Button (& PORTB, 7,1,1)) Tone1 ();
enquanto (PORTB e 0x80);
se (Button (& PORTB, 6,1,1))
Tone2 (); enquanto (PORTB e 0x40);
se (Button (& PORTB, 5,1,1))
Tone3 (); enquanto (PORTB e 0x20);
se (Button (& PORTB, 4,1,1))
Melody2 (); enquanto (PORTB e 0x10);
se (Button (& PORTB, 3,1,1))
Melody (); while (PORTB e 0x08);
}
/ / Configurar um pinos como I / O digital
/ Input / Configura RB7 .. RB3 como / RD3 Configure / como saída
/ / RB7 execuções Tone1
/ / Espera botão para ser liberado
/ / RB6 execuções Tone2
/ / Espera botão para ser liberado
/ / RB5 execuções Tone3
/ / Espera botão para ser liberado
/ / RB4 execuções Melody2
/ / Espera botão para ser liberado
/ / RB3 execuções Melody
/ / Espera botão para ser liberado
Mikroelektronika - Soluções de software e hardware para o mundo embutido 441
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Conexão HW
Exemplo de uma biblioteca de sons sonnection
mikroC PRO para PIC
442
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI1_Init (void);
Retorna Nada.
Descrição
Isso configura rotina e permite que o módulo SPI com as seguintes configurações:
- Modo Master - 8 de transferência de dados de bit - Bit mais significativo primeiro enviado - Relógio de série baixa quando ociosa - Os dados amostrados na borda - Serial clock = FOSC / 4
Requer Você necessidade PIC MCU com hardware SPI integrado.
Exemplo SPI1_Init (); / / Inicializa o módulo SPI com as configurações padrão
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
SPI BIBLIOTECA
módulo SPI está disponível com um número de modelos PIC MCU. mikroC PRO para PIC fornece uma biblioteca para inicializar o modo de trabalho escravo e confortável com o modo Master. PIC pode facilmente com- comunicar com outros dispositivos através SPI: conversores A / D, conversores D / A, MAX7219, LTC1290, etc Você precisa PIC MCU com hardware integrados SPI (por exemplo, PIC16F877).
Nota: PIC18 MCUs Alguns têm vários módulos SPI. Alternando entre os módulos IPS, no Biblioteca SPI é feito pela função SPI_Set_Active (módulo SPI tem de ser previamente inicializada).
Nota: Para usar o rotina da biblioteca SPI desejado, basta alterar o número 1 no protótipo com o número adequado de módulo, ou seja, SPI2_Init ();
Rotinas da biblioteca
- - - - -
Spi1_Init Spi1_Init_Advanced Spi1_Read Spi1_Write Spi_Set_Active
Spi_Init
Mikroelektronika - Soluções de software e hardware para o mundo embutido
443
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI1_Init_Advanced (unsigned short master_slav, unsigned short data_sample, unsigned short clock_idle, unsigned short transmit_edge);
Retorna Nada.
Descrição
Configura e inicializa SPI. SPI1_Init ou SPI1_Init_Advanced precisa ser chamada antes de usar outras funções Biblioteca da SPI.
Parâmetros modo, data_sample e clock_idle configurar o módulo SPI, e pode ter os seguintes valores:
Requer Você precisa PIC MCU com hardware SPI integrado.
Exemplo
/ / Set SPI1 módulo para o modo mestre, dados do relógio = FOSC / 4, amostrados em meio do intervalo de baixo estado, relógio parado e dados trans- mitido em baixa para a borda alta: SPI1_Init_Advanced (_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
Descrição const biblioteca d fi id SPI modo de trabalho:
relógio mestre = FOSC / 4 _SPI_MASTER_OSC_DIV4
Master clock = Fosc/16 _SPI_MASTER_OSC_DIV16
Master clock = Fosc/64 _SPI_MASTER_OSC_DIV64
Mestre TMR2 fonte de relógio _SPI_MASTER_TMR2
Escravo selecionar habilitado _SPI_SLAVE_SS_ENABLE
Escravo selecione Desativado _SPI_SLAVE_SS_DIS
Dados intervalo de amostragem:
Os dados de entrada da amostra no meio do intervalo _SPI_DATA_SAMPLE_MID- DLE
Os dados de entrada da amostra no final do intervalo _SPI_DATA_SAMPLE_END
SPI estado relógio em repouso: Relógio de idle _SPI_CLK_IDLE_HIGH
Relógio de marcha lenta _SPI_CLK_IDLE_LOW
borda de transmissão: Transmite dados em baixa para a borda alta _SPI_LOW_2_HIGH
Dados transmitir em alta para baixa borda _SPI_HIGH_2_LOW
CAPÍTULO 7 Bibliotecas
Spi1_Init_Advanced
mikroC PRO para PIC
444
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short SPI1_Read (unsigned short buffer);
Retorna Retorna os dados recebidos.
Descrição
Lê um byte do barramento SPI.
Parâmetros:
- buffer: dados fictícios para geração de clock (veja folha de dados
do dispositivo para a SPI
Requer Você precisa PIC MCU com hardware SPI integrado.
SPI deve ser inicializado e comunicação estabelecida antes de usar este fun- ção. Veja SPI1_Init_Advanced ou SPI1_Init.
Exemplo buffer curto tomar,; ... ter = SPI1_Read (buffer);
Protótipo vazio SPI1_Write (unsigned short data_);
Retorna Nada.
Descrição
Escreve byte através do barramento SPI.
Parâmetros:
- wrdata: dados a serem enviados
Requer Você precisa PIC MCU com hardware SPI integrado.
SPI deve ser inicializado e comunicação estabelecida antes de usar este fun- ção. Veja SPI1_Init_Advanced ou SPI1_Init.
Exemplo SPI1_Write (1);
CAPÍTULO 7
mikroC PRO para PIC
Spi1_Read
Spi1_Write
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
445
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Set_Active (char (* Read_ptr) (char))
Retorna Nada.
Descrição
Define o módulo SPI ativos que serão usados pelas rotinas de SPI.
Parâmetros:
- read_ptr: SPI1_Read manipulador
Requer A rotina é disponível apenas para MCUs com dois módulos de SPI. Usado módulo SPI deve ser inicializada antes de usar esta função. Veja o SPI1_Init, SPI1_Init_Advanced
Exemplo SPI_Set_Active (& SPI2_Read) / / Define o SPI2 módulo activo
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
SPI_Set_Active
Exemplo Biblioteca
O código demonstra como usar o SPI biblioteca de funções para a comunicação entre o módulo de SPI do MCU e MCP4921 da Microchip 12-bit D / A converter
/ / Módulo de conexões DAC sbit Chip_Select em RC0_bit; sbit Chip_Select_Direction em TRISC0_bit; / / Fim módulo conexões DAC
unsigned int valor;
vazio InitMain () {
TRISB0_bit = 1; TRISB1_bit = 1; Chip_Select = 1; Chip_Select_Direction = 0; SPI1_Init ();
/ / Definir o pino RA0 como entrada / / Set RA1 pino como entrada / Deseleccionar / CAD / / CS Set # pino como saída / / Inicializar SPI módulo
}
/ / Incrementa DAC (0 .. 4095) -> tensão de saída (0 .. Vref) vazio DAC_Output (unsigned int valueDAC) {
char temp;
Chip_Select = 0;
/ / Seleciona chip DAC
/ / Envia Byte alta temp = (valueDAC>> 8) & 0x0F; / Loja valueDAC [11 .. 8] para temp [3 .. 0] temp | = 0x30 / / Definir configuração DAC, consulte MCP4921 datasheet SPI1_Write (temp) / / Envia o byte mais alto via SPI / / Envia Byte Low
446 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
temp = valueDAC; SPI1_Write (temp);
Chip_Select = 1;
}
vazio main () {
ANSEL = 0; ANSELH = 0; InitMain ();
value = 2048;
enquanto (1) {
Bibliotecas / / Loja valueDAC [7 .. 0] para temp [7 .. 0] / / Envia byte baixo via SPI
/ / Deseleccionar chip DAC / / Realizar a inicialização principal / / Quando iniciar o programa, o DAC dá / / Saída no mid-range
/ / Loop infinito
}
}
se ((RA0_bit) & & (valor <4,095)) {
valor + +; }
mais { se ((RA1_bit) & & (valor> 0)) {
valor -; }
} DAC_Output (valor); Delay_ms (1);
/ / Se o botão for pressionado RA0 / Valor do incremento / / / Se RA1 botão é pressionado / Valor / decremento / / Enviar valor para DAC chip / Devagar ritmo de repetição das teclas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
447
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Conexão HW
SPI conexão HW
mikroC PRO para PIC
448
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
SPI biblioteca Ethernet
A ENC28J60 é um controlador Ethernet autônomo com um padrão da indústria Serial Peripheral Interface (SPI ™). Ele é projetado para servir de interface de rede Ethernet para qualquer controlador equipado com SPI.
A ENC28J60 atende a todos os padrões IEEE 802.3 especificações. Ele incorpora um número sistemas da filtragem de pacotes para limitar os pacotes de entrada. Ele também fornece um interno DMA módulo para transferência rápida de dados e hardware cálculo de checksum assistida IP ções. A comunicação com o controlador de host é implementada através de dois pinos de interrupção eo IPT, com taxas de dados de até 10 Mb / s. Dois pinos dedicados são utilizados para LED link e indicação de atividade da rede.
Esta biblioteca foi projetada para simplificar a manipulação do hardware subjacente (ENC28J60). Ele funciona com qualquer PIC com SPI integrado e mais de 4 Kb de memória ROM. 38 a 40 MHz de clock é recomendado para obter 8-10 relógio SPI Mhz, caso contrário PIC deve ser cronometrado pelo ENC28J60 saída do relógio devido ao seu erro de silício em hardware SPI. Se você tentar menor velocidade de relógio do PIC, pode haver placa travar ou perder algumas solicitações.
SPI biblioteca Ethernet suporta:
- O protocolo IPv4. - Requisições ARP. - ICMP echo requests. - Os pedidos UDP. - Os pedidos TCP (sem pilha, sem reconstrução de pacotes). - O cliente com cache ARP. - O cliente DNS. - UDP cliente. - O cliente DHCP. - Fragmentação do pacote não é suportado.
Nota: Devido a PIC16 / Flash RAM limitações biblioteca PIC16 NÃO tem ARP, DNS, UDP e suporte ao cliente DHCP implementado.
Nota: A variável biblioteca Global SPI_Ethernet_userTimerSec é usado para acompanhar tempo para todas as implementações do cliente (ARP, DNS, DHCP e UDP). É responsabilidade do usuário dade para aumentar esta variável a cada segundo em que o código se algum dos clientes é usado.
Nota: Para usuários avançados, existem arquivos de cabeçalho ("eth_enc28j60LibDef.h" e "Eth_enc28j60LibPrivate.h") em Utiliza \ P16 e P18 usa pastas \ do compilador com descrição de todas as rotinas e variáveis globais, relevantes para o usuário, implementar- ed na Biblioteca Ethernet SPI.
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
449
www.mecatronicadegaragem.blogspot.com
As rotinas a seguir deve ser definida em todos os projectos usando SPI
Bibli t Eth t
Descrição: Exemplo:
unsigned int SPI_Ethernet_UserTCP (unsigned char * RemoteHost, não assinado int RemotePort, unsigned int localPort, unsigned int reqLength);
TCP manipulador de
solicitação
Consulte a biblioteca exemplo, no bot- Tom de esta página para execução de código ção
unsigned int SPI_Ethernet_UserUDP (unsigned char * RemoteHost, unsigned int RemotePort, unsigned int destPort, unsigned int reqLength);
UDP manipulador de
solicitação
Consulte a biblioteca exemplo, no bot- Tom desta página para execução de código ção
As seguintes variáveis deve ser definida em todos os
projetos usando SPI E h
Descrição: Exemplo:
sbit sfr extern SPI_Ethernet_CS
chip ENC28J60 pinos de
l ã
sbit SPI_Ethernet_CS na RC1_bit;
sbit sfr extern SPI_Ethernet_RST;
ENC28J60 pino de reset. sbit SPI_Ethernet_Rst na RC0_bit;
sbit sfr extern SPI_Ethernet_CS_Direc ção;
Direção do ENC28J60 pinos selecionar chip.
sbit SPI_Ethernet_CS_Direc ção em TRISC1_bit;
sbit sfr extern SPI_Ethernet_RST_Dire ç ã o;
Direção do ENC28J60 pino de reset.
sbit SPI_Ethernet_Rst_Dire ç ã o em TRISC0_bit;
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Nota: O hardware apropriado módulo SPI deve ser inicializada antes de usar qualquer o SPI biblioteca de rotinas Ethernet. Consulte a Biblioteca SPI. Para MCUs com dois módulos SPI é possível inicializar ambos e, em seguida, switch usando o SPI_Set_Active () rotina. As dependências externas do SPI Ethernet Biblioteca
450
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Rotinas da biblioteca
PIC16 e PIC18:
Bibliotecas
- - - - - - - - - - - - -
SPI_Ethernet_Init SPI_Ethernet_Enable SPI_Ethernet_Disable SPI_Ethernet_doPacket SPI_Ethernet_putByte SPI_Ethernet_putBytes SPI_Ethernet_putString SPI_Ethernet_putConstString SPI_Ethernet_putConstBytes SPI_Ethernet_getByte SPI_Ethernet_getBytes SPI_Ethernet_UserTCP SPI_Ethernet_UserUDP
Só PIC18:
- - - - - - - - - - -
SPI_Ethernet_getIpAddress SPI_Ethernet_getGwIpAddress SPI_Ethernet_getDnsIpAddress SPI_Ethernet_getIpMask SPI_Ethernet_confNetwork SPI_Ethernet_arpResolve SPI_Ethernet_sendUDP SPI_Ethernet_dnsResolve SPI_Ethernet_initDHCP SPI_Ethernet_doDHCPLeaseTime SPI_Ethernet_renewDHCP
Mikroelektronika - Soluções de software e hardware para o mundo embutido
451
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Ethernet_Init (unsigned char * Mac, unsigned char * Ip, unsigned char FullDuplex);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele inicializa ENC28J60 controlador. Esta função é internamente subdividida em 2 partes para ajudá-vinculador quando vem com pouca memória.
ENC28J60 configurações do controlador (parâmetros não mencionados aqui são definidos
como padrão):
- Recebe o endereço inicial do buffer: 0x0000. - Receber endereço final buffer: 0x19AD. - Transmitir o endereço inicial do buffer: 0x19AE. - Transmitir endereço final buffer: 0x1fff. - RAM buffer leitura / gravação ponteiros em modo auto-incremento. - Receber filtros definidos como padrão: CRC + MAC + MAC Unicast Broadcast no modo de OR. - Controle de fluxo com TX e RX pausa quadros em modo full duplex. - Quadros são preenchidos com 60 + bytes CRC. - Tamanho máximo do pacote é definido para 1518. - Back-to-Back-Inter Packet Gap: 0x15 em modo full duplex; 0x12 em modo half duplex. - Non-Back-to-Back-Inter Packet Gap: 0x0012 em modo full duplex; 0x0C12 em modo half duplex. - A janela de colisão é definido como 63 em modo half duplex para acomodar algumas - ENC28J60 revisões bugs silício. - Saída CLKOUT é desativado para reduzir a geração de EMI. - Loopback half duplex com deficiência. - LED de configuração: padrão (LEDA link-status, atividade LEDB-link).
Parâmetros:
ó i i t édi té d MAC álid
CAPÍTULO 7 Bibliotecas
Spi_Ethernet_Init
mikroC PRO para PIC
452
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Requer
As variáveis globais:
- SPI_Ethernet_CS: Chip Selecionar linha - Direção do pino de Chip Select: SPI_Ethernet_CS_Direction - SPI_Ethernet_RST: linha de reset - Direção do pino de Reset: SPI_Ethernet_RST_Direction
devem ser definidas antes de utilizar esta função.
O módulo SPI deve ser inicializado. Veja o SPI1_Init e SPI1_Init_Advanced rotinas.
Exemplo
# Define SPI_Ethernet_HALFDUPLEX 0 # Define um SPI_Ethernet_FULLDUPLEX
/ / ME ehternet pinagem NIC sbit sfr SPI_Ethernet_Rst em RC0_bit; sbit sfr SPI_Ethernet_CS em RC1_bit; sbit sfr SPI_Ethernet_Rst_Direction em TRISC0_bit; sbit sfr SPI_Ethernet_CS_Direction em TRISC1_bit; / / Fim ethernet NIC definições
unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f} / / meu endereço MAC unsigned char myIpAddr = {192, 168, 1, 60} / / o meu IP addr
SPI1_Init (); SPI_Ethernet_Init (myIpAddr myMacAddr, SPI_Ethernet_FULLDUPLEX);
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
453
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Ethernet_Enable (unsigned char enFlt);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Esta rotina permite que o tráfego de rede apropriada no o ENC28J60 módulo por meio de ela receber filtros (unicast, multicast, broadcast, CDC). Tipo específico de tráfego de rede será ativado se uma correspondente pouco de parâmetro essa rotina de entrada está definido. Portanto, mais do que um tipo de rede- tráfego de trabalho pode ser ativada ao mesmo tempo. Para este efeito, pré biblioteca constantes (ver tabela abaixo) pode ser ORed para formar o valor de entrada apropriado.
Parâmetros: - enFlt: tráfego de rede / receber bandeiras filtro. Cada bit corresponde à dis- comeu o tráfego de rede / filtro de recepção:
Bit Descrição Máscara const biblioteca predefinidos
MAC tráfego Broadcast / filtro de recepção _SPI_Ethernet_BROAD-
0 0x01 pavilhão. Quando definido, MAC broadcast Traf- CAST fic será habilitado. MAC tráfego Multicast / filtro de recepção
_SPI_Ethernet_MULTI- 1 0x02 pavilhão. Quando definido, o tráfego multicast MAC CAST
será habilitado. 2 0x04 não utilizado nenhum
3 0x08 não utilizado none
4 0x10 não utilizado nenhum CRC marca de verificação. Quando definido, os pacotes
5 0x20 _SPI_Ethernet_CRC com o campo CRC inválido será descartado.
6 0x40 não utilizado nenhum MAC tráfego Unicast / filtro de recepção pavilhão.
7 0x80 Quando definido, o MAC será o tráfego unicast _SPI_Ethernet_UNICAST habilitado.
Nota: Advance filtragem disponíveis no ENC28J60 módulo, como Padrão Partida, Magic Packet e Hash Table não pode ser habilitado por esta rotina. Adicionalmente, todos os filtros, exceto CRC, habilitado com essa rotina vai funcionar no modo de OR, o que significa que o pacote será recebido se qualquer um dos filtros ativados aceita.
Nota: Esta rotina vai mudar configuração do filtro receber on the fly Não será no
CAPÍTULO 7 Bibliotecas
Spi_Ethernet_Enable
mikroC PRO para PIC
454
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Ethernet_Disable (unsigned char disFlt);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Esta rotina desabilita o tráfego de rede apropriada no o ENC28J60 módulo por meio de ela receber filtros (unicast, multicast, broadcast, CDC). Tipo específico de tráfego de rede será desativada se um correspondente pouco de parâmetro essa rotina de entrada está definido. Portanto, mais do que um tipo de rede- tráfego de trabalho pode ser desativado, ao mesmo tempo. Para este efeito, pré biblioteca constantes (ver tabela abaixo) pode ser ORed para formar o valor de entrada apropriado.
Parâmetros: - disFlt: tráfego de rede / receber bandeiras filtro. Cada bit corresponde a apro- tráfego de rede adequado / filtro de recepção:
biblioteca predefinidos
Descrição Mask Bit const MAC tráfego Broadcast / receber bandeira filtro. Quando Spi_Ethernet_BRO
0 0x01 conjunto, MAC tráfego de difusão será desativado. ADCAST MAC tráfego Multicast / receber bandeira filtro. Quando Spi_Ethernet_MUL
1 0x02 definido, o tráfego multicast MAC será desativado. TICAST
2 0x04 não utilizado none
3 0x08 não utilizado none
4 0x10 não utilizado none CRC marca de verificação. Quando definido, verificação de CRC será
5 0x20 ser desativado e pacotes com CRC inválido Spi_Ethernet_CRC campo serão aceitos.
6 0x40 não utilizado none
MAC tráfego Unicast / receber bandeira filtro. Quando Spi_Ethernet_UNI 7 0x80
conjunto, MAC tráfego unicast será desativado. CAST Nota: Advance filtragem disponíveis no ENC28J60 módulo, como Padrão Partida, Magic Packet e Hash Table não pode ser desativado por esta rotina.
Nota: Esta rotina vai mudar configuração do filtro receber on-the-fly. Não será, no l f ti / d ti b / t iti ló i l t
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init.
Exemplo SPI_Ethernet_Enable (_SPI_Ethernet_CRC | _SPI_Ethernet_UNICAST); / / CRC permitir a verificação eo tráfego Unicast
CAPÍTULO 7
mikroC PRO para PIC
Spi_Ethernet_Disable
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
455
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char SPI_Ethernet_doPacket ();
Retorna
- 0 - Mediante o processamento de pacotes de sucesso (zero pacotes recebidos ou recebidos
pacote processado com sucesso). - 1 - Aquando erro de recepção ou receber corrupção buffer. ENC28J60 controlador
precisa ser reiniciado. - 2 - O pacote recebido não foi enviado para nós (não o nosso IP, nem endereço de broadcast IP). R b d IP f i IP 4
Descrição
Esta é a rotina MAC do módulo. Ele processa o pacote recebido seguinte se existir. Os pacotes são processados da seguinte forma:
- Requisições ARP e ICMP são respondidas automaticamente. - Mediante pedido TCP é a função Spi_Ethernet_UserTCP Apelou a mais
processamento. - Mediante pedido UDP Spi_Ethernet_UserUDP a função é chamada para mais
processamento.
Nota: S i Eth t d P k t deve ser chamado o mais rápido possível no código do usuário Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo se (SPI_Ethernet_doPacket () == 0) (1) {/ / processo recebeu-pack ets
... }
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init.
Exemplo SPI_Ethernet_Disable (_SPI_Ethernet_CRC | _SPI_Ethernet_UNICAST); / / verificação CRC desativar e tráfego Unicast
CAPÍTULO 7 Bibliotecas
Spi_Ethernet_doPacket
mikroC PRO para PIC
456
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Ethernet_putBytes (unsigned char * Ptr, unsigned char n);
Retorna Nada.
Descrição
Este é o módulo MAC rotina. Ele armazena o número solicitado de bytes em ENC28J60 RAM a partir de correntes ENC28J60 escrever localização (EWRPT) ponteiro.
Parâmetros:
- ptr: RAM tampão contendo bytes a ser escrito em ENC28J60 RAM. - n: número de bytes a ser escrito.
Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo char * Buffer = "mikroElektronika"; ... SPI_Ethernet_putBytes (buffer, 16); / / coloque em uma matriz de RAM buffer ENC28J60
Protótipo vazio SPI_Ethernet_putByte (unsigned char v);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele armazena um byte para endereço apontado pela corrente aluguel ENC28J60 escrever ponteiro (EWRPT).
Parâmetros:
valor para armazenar Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo char dados; ... SPI_Ethernet_putByte (dados) / / colocar um byte no buffer ENC28J60
CAPÍTULO 7
mikroC PRO para PIC
Spi_Ethernet_putByte
Spi_Ethernet_putBytes
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
457
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Ethernet_putConstBytes (const unsigned char * Ptr, não assinado char n);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele armazena o número de bytes solicitado em const ENC28J60 RAM a partir de correntes ENC28J60 escrever localização (EWRPT) ponteiro.
Parâmetros:
- ptr: buffer const contendo bytes a ser escrito em ENC28J60 RAM. ú d b i Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo const char * Buffer = "mikroElektronika"; ... SPI_Ethernet_putConstBytes (buffer, 16); / / colocar um array em const ENC28J60 buffer
Protótipo unsigned int SPI_Ethernet_putString (unsigned char * Ptr);
Retorna Número de bytes escritos em ENC28J60 RAM.
Descrição
Esta é a rotina MAC do módulo. Ele armazena string todo (excluindo a terminação nula) em ENC28J60 RAM a partir de corrente ENC28J60 escrever localização (EWRPT) ponteiro.
Parâmetros:
- ptr: string a ser escrita em ENC28J60 RAM.
Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo char * Buffer = "mikroElektronika"; ... SPI_Ethernet_putString (buffer); / / coloque uma seqüência de RAM em ENC28J60 buffer
CAPÍTULO 7 Bibliotecas
Spi_Ethernet_putConstBytes
Spi_Ethernet_putString
mikroC PRO para PIC
458
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned int SPI_Ethernet_putConstString (const unsigned char * Ptr);
Retorna Número de bytes escritos em ENC28J60 RAM.
Descrição
Esta é a rotina MAC do módulo. Ele armazena string const todo (excluindo a terminação nula) em ENC28J60 RAM a partir de correntes ENC28J60 escrever localização (EWRPT) ponteiro.
Parâmetros:
t const string a ser escrita em ENC28J60 RAM Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo const char * Buffer = "mikroElektronika"; ... SPI_Ethernet_putConstString (buffer); / / colocar um const string em buffer ENC28J60
Protótipo unsigned char SPI_Ethernet_getByte ();
Retorna Byte lido ENC28J60 RAM.
Descrição Esta é a rotina MAC do módulo. Ele busca um byte do endereço apontado pelo cur- l l i d l i (ERDPT) Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo char buffer; ... buffer = SPI_Ethernet_getByte (); / / lê um byte de ENC28J60 buffer
CAPÍTULO 7
mikroC PRO para PIC
Spi_Ethernet_putConstString
Spi_Ethernet_getByte
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
459
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Ethernet_getBytes (unsigned char * Ptr, unsigned int addr, unsigned char n);
Retorna Nada.
Descrição
Esta é a rotina MAC do módulo. Ele obtém o número de bytes de equested ENC28J60 RAM a partir de determinado endereço. Se o valor da 0xFFFF é passado como o parâmetro de endereço, a leitura terá início a partir atual ENC28J60 leia ponteiro (ERDPT) local.
Parâmetros:
- ptr: buffer para armazenamento de bytes lidos ENC28J60 RAM. - addr: ENC28J60 RAM endereço de início. Valores válidos: 0 .. 8192. - n: número de bytes a serem ler.
Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo char buffer [16]; ... SPI_Ethernet_getBytes (buffer, 0x100, 16); / / lê 16 bytes, a partir do endereço 0x100
CAPÍTULO 7 Bibliotecas
Spi_Ethernet_getBytes
mikroC PRO para PIC
460
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned int SPI_Ethernet_UserTCP (unsigned char * RemoteHost, unsigned int RemotePort, unsigned int localPort, unsigned int reqLength);
Retorna - 0 - Não deve haver uma resposta ao pedido. - Comprimento da TCP / resposta HTTP campo de dados - de outra forma.
Descrição
Esta é a rotina de módulo TCP. Ele é chamado internamente pela biblioteca. O acesso do
usuário es para o pedido de TCP / HTTP usando algumas das rotinas SPI_Ethernet_get. O usuário coloca os dados no buffer de transmissão usando alguns dos SPI_Ethernet_put rotinas. A função deve retornar o tamanho em bytes da resposta HTTP TCP / ou 0 se não há nada a transmitir. Se não há necessidade de responder ao TCP / HTTP pedidos, apenas definir esta função com retorno (0) como um única instrução.
Parâmetros:
- remoteHost : Endereço IP do cliente. - RemotePort : Porta TCP cliente. - localPort : Porta para que o pedido é enviado. - reqLength : TCP / solicitação HTTP comprimento do campo de dados.
Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo Essa função é chamado internamente pela biblioteca e não deve ser chamado pelo o ódi d á i
CAPÍTULO 7
mikroC PRO para PIC
Spi_Ethernet_UserTCP
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
461
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned int SPI_Ethernet_UserUDP (unsigned char * RemoteHost, unsigned int RemotePort, unsigned int destPort, unsigned int reqLength);
Retorna - 0 - não deve haver uma resposta ao pedido. - Comprimento do campo de dados UDP resposta - outra forma.
Descrição
Esta é a rotina de módulo UDP. Ele é chamado internamente pela biblioteca. O acesso do usuário es para o pedido UDP usando alguns dos SPI_Ethernet_get rotinas. O usuário coloca os dados no buffer de transmissão usando algumas das rotinas SPI_Ethernet_put. A função deve retornar o tamanho em bytes da resposta UDP, ou 0 nada a se transmitir. Se você não precisa responder às solicitações UDP, basta definir esta função com um retorno (0) como única instrução.
Parâmetros: - remoteHost : Endereço IP do cliente. - RemotePort : Porta do cliente. - destPort : Porta para que o pedido é enviado. - reqLength : Pedido UDP comprimento do campo de dados.
Requer módulo Ethernet deve ser inicializado. Veja Spi_Ethernet_Init.
Exemplo Essa função é chamado internamente pela biblioteca e não deve ser chamado pelo código de usuário.
Protótipo unsigned char * SPI_Ethernet_getIpAddress ();
Retorna Ponter para a variável global exploração endereço IP.
Descrição
Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar IP atribuído endereço. Nota: O usuário deve sempre copiar o endereço IP do local de RAM retornado por esta rotina em que é buffer próprio endereço IP. Estes locais não devem ser alterados pelo usuário, em qualquer caso.
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo unsigned char endereçoip [4] / / endereço IP do usuário buffer ... memcpy (ipaddr, SPI_Ethernet_getIpAddress (), 4); / / recupera o endereço IP
CAPÍTULO 7 Bibliotecas
Spi_Ethernet_UserUDP
SPI_Ethernet_getIpAddress
mikroC PRO para PIC
462
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char * SPI_Ethernet_getDnsIpAddress ()
Retorna Ponter para a variável global exploração DNS o endereço IP.
Descrição
Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar atribuído endereço IP do DNS.
Nota: O usuário deve sempre copiar o endereço IP do local de RAM retornado por esta rotina em seu próprio buffer DNS o endereço IP. Estes locais não devem ser alteradas pelo usuário, em qualquer caso.
Requer módulo Ethernet tem para ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo unsigned char dnsIpAddr [4]; / / user tampão DNS o endereço IP ... memcpy (dnsIpAddr, SPI_Ethernet_getDnsIpAddress (), 4); / / busca Endereço do servidor DNS
Protótipo unsigned char * SPI_Ethernet_getGwIpAddress ();
Retorna Ponter para a variável global exploração endereço IP do gateway.
Descrição
Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar atribuído o endereço IP do gateway.
O usuário deve: Nota sempre copiar o endereço IP do local de RAM retornado por esta rotina em seu próprio gateway buffer endereço IP. Estes locais não devem ser alteradas pelo usuário, em qualquer caso!
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo unsigned char gwIpAddr [4]; / / user gateway buffer endereço IP ... memcpy (gwIpAddr, SPI_Ethernet_getGwIpAddress (), 4); / / recupera-gate endereço IP como
CAPÍTULO 7
mikroC PRO para PIC
SPI_Ethernet_getGwIpAddress
SPI_Ethernet_getDnsIpAddress
Bibliotecas
Mikroelektronika - Softwares e soluções de hardware para Embedded World
463
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Ethernet_confNetwork (char * IPMask, char * GwIpAddr, char * DnsIpAddr);
Retorna Nada.
Descrição
Configura os parâmetros de rede (IP, máscara de sub-rede, endereço de gateway IP, DNS IP endereço) quando o DHCP está não utilizados.
Parâmetros: - IPMask: máscara de sub-rede IP. - gwIpAddr endereço IP do gateway. - dnsIpAddr: DNS o endereço IP.
Nota: Os parâmetros de rede acima mencionadas devem ser fixadas por esta
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo
char IPMask [4] = {255, 255, 255, 0}; / máscara de rede / (para exemplo: 255.255.255.0) char gwIpAddr [4] = {192, 168, 1, 1}; / gateway / (Roteador) endereço IP char dnsIpAddr [4] = {192, 168, 1, 1} / / IP do servidor DNS endereço ... SPI_Ethernet_confNetwork (IPMask, gwIpAddr dnsIpAddr); / / set parâmetros de configuração de rede
Protótipo unsigned char * SPI_Ethernet_getIpMask ()
Retorna Ponter para a variável global exploração IP, máscara de sub-rede.
Descrição
Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar máscara IP atribuídos.
Nota: O usuário deve sempre copiar o endereço IP do local de RAM
retornado
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo unsigned char IPMask [4] / / IP do usuário buffer máscara ... memcpy (IPMask, SPI_Ethernet_getIpMask (), 4); / / busca de sub-rede IP máscara
CAPÍTULO 7 Bibliotecas
SPI_Ethernet_getIpMask
SPI_Ethernet_confNetwork
mikroC PRO para PIC
464
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char * SPI_Ethernet_arpResolve (unsigned char * Ip, não assinado char tmax);
Retorna - Endereço MAC para trás o endereço IP - o endereço IP solicitado foi resolvido. - 0 - De outra forma.
Descrição
Esta é a rotina do módulo ARP. Ele envia uma solicitação ARP para determinado endereço IP e aguarda resposta ARP. Se o endereço IP solicitado foi resolvido, uma entrada de caixa ARP é usado para armazenar a configuração. dinheiro ARP pode armazenar até 3 entradas. Para ARP referem-se a estrutura de caixa "Eth_enc28j60LibDef.h" arquivo de cabeçalho na década de compilador Uses/P18 pasta.
Parâmetros:
- IP: endereço IP a ser resolvido. d
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo unsigned char IpAddr [4] = {192, 168, 1, 1} / / endereço IP ... SPI_Ethernet_arpResolve (IpAddr, 5); / / pega o endereço MAC por trás da acima do IP Endereço, aguarde 5 segundos para a resposta
CAPÍTULO 7
mikroC PRO para PIC
SPI_Ethernet_arpResolve
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
465
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char SPI_Ethernet_sendUDP (unsigned char * DestIP, não assinado int sourcePort, unsigned int destPort, unsigned char * Pkt, não assinado int pktLen);
Retorna - 1 - Pacote UDP foi enviada com sucesso. - 0 - De outra forma.
Descrição
Esta é a rotina de módulo UDP. Ele envia um pacote UDP na rede.
Parâmetros:
- DestIP: endereço IP do host remoto. - sourcePort: porta de origem UDP local número. - destPort: destino número da porta UDP. - PKT: pacotes para transmitir. - pktLen: comprimento em bytes do pacote para transmitir.
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo
não assinado char IpAddr [4] = {192, 168, 1, 1} / / IP remoto endereço ... SPI_Ethernet_sendUDP (IpAddr, 10001, 10001, "Olá", 5); / / envia Olá mensagem para o endereço IP acima, de porta UDP 10001 para A porta UDP 10001
CAPÍTULO 7 Bibliotecas
SPI_Ethernet_sendUDP
mikroC PRO para PIC
466
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char * SPI_Ethernet_dnsResolve (unsigned char * Host, unsigned char tmax);
Retorna - Ponteiro para o local onde o endereço IP - o nome do host solicitado foi resolvido. - 0 - De outra forma.
Descrição
Este é o DNS módulo de rotina. Ele envia um pedido DNS para determinado nome
de host e aguarda resposta do DNS. Se o nome do host solicitado foi resolvido, o seu endereço IP é armazenado na variável global biblioteca e um ponteiro que contém este endereço é retornado por a rotina. UDP porta 53 é usada como porta de DNS.
Parâmetros:
-Host: nome do host para ser resolvido. -Tmax: tempo em segundos para esperar por uma resposta.
Nota: Os serviços de Ethernet não são interrompidos enquanto esta rotina
aguarda DNS O d d d l d
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo
unsigned char * RemoteHostIpAddr [4] / / endereço IP do host do usuário buffer ... / / Servidor SNTP: / Zurique / Suíça: Laboratório de Sistemas Integráveis, da Suíça Fed. Inst. de Tecnologia / / 129.132.2.21: swisstime.ethz.ch / / Área de serviço: Suíça e Europa memcpy (remoteHostIpAddr, SPI_Ethernet_dnsResolve ("swisstime.ethz.ch", 5), 4);
CAPÍTULO 7
mikroC PRO para PIC
SPI_Ethernet_dnsResolve
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
467
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char SPI_Ethernet_initDHCP (unsigned char tmax);
Retorna - 1 - Parâmetros de rede foram obtidos com sucesso. - 0 - De outra forma.
Descrição
Esta é a rotina de módulo de DHCP. Ele envia um pedido DHCP para os parâmetros de rede (IP, gateway, DNS e endereços IP, máscara de sub-rede) e aguarda resposta de DHCP. Se os parâmetros solicitados foram obtidos com sucesso, seus valores são armazenados em a biblioteca de variáveis globais.
Estes parâmetros podem ser obtidos através da utilização adequada biblioteca IP
começar rotinas:
- SPI_Ethernet_getIpAddress - buscar o endereço IP. - SPI_Ethernet_getGwIpAddress - buscar endereço IP do gateway. - SPI_Ethernet_getDnsIpAddress - buscar DNS o endereço IP. - SPI_Ethernet_getIpMask - buscar IP, máscara de sub-rede.
Porta UDP 68 é usado como um cliente DHCP e porta UDP 67 é usado como serv DHCP er porta.
Parâmetros:
- Tmax: tempo em segundos para esperar por uma resposta.
Nota: Os serviços de Ethernet não são interrompidos enquanto esta rotina
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo ... SPI_Ethernet_initDHCP (5); / / obter a configuração de rede DHCP servidor, aguarde 5 segundos para a resposta ...
CAPÍTULO 7 Bibliotecas
SPI_Ethernet_initDHCP
mikroC PRO para PIC
468
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char SPI_Ethernet_renewDHCP (unsigned char tmax);
Retorna - 1 - Em caso de sucesso (tempo de concessão foi renovada). - 0 - De outra forma (pedido de renovação expirou).
Descrição
Esta é a rotina de módulo de DHCP. Ele envia concessão de endereço IP do tempo solicitação de renovação de Servidor DHCP.
Parâmetros:
t t d t Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init.
Disponível para microcontroladores da família PIC18 só.
Exemplo
while (1) { ... if (SPI_Ethernet_doDHCPLeaseTime ())
SPI_Ethernet_renewDHCP (5); / / é hora de renovar o IP concessão de endereço, com 5 segundos para uma resposta
... }
Protótipo unsigned char SPI_Ethernet_doDHCPLeaseTime ();
Retorna - 0 - Tempo de concessão ainda não tenha terminado ainda. - 1 - Locação tempo expirou, é hora de renovar.
Descrição Esta é a rotina de módulo de DHCP. Ela cuida de concessão de endereço IP vez por decre- a biblioteca de tempo de execução global de locação contador. Quando esse tempo expirar,
Requer módulo Ethernet deve ser inicializado. Veja SPI_Ethernet_Init. Disponível para microcontroladores da família PIC18 só.
Exemplo
while (1) { ... if (SPI_Ethernet_doDHCPLeaseTime ())
... / / É hora de renovar o endereço IP }
CAPÍTULO 7
mikroC PRO para PIC
SPI_Ethernet_doDHCPLeaseTime
SPI_Ethernet_renewDHCP
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
469
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca Este código mostra como usar o mini-biblioteca Ethernet: - O conselho vai responder a ARP e ICMP echo requests - O conselho vai responder a UDP pedidos em qualquer porta:
devolve o pedido de char superior com um cabeçalho feito de IP da máquina remota e número da porta
- O conselho vai responder a solicitações HTTP na porta 80, com o método GET caminhos:
/ Vai retornar a página HTML principal / S irá retornar o status da placa como texto / T0 ... / T7 irá mudar para RD0 RD7 pouco e retornar HTML página principal todos os outros pedidos de retorno também HTML página principal.
/ Duplex / config bandeiras # Define Spi_Ethernet_HALFDUPLEX # Define Spi_Ethernet_FULLDUPLEX
0x00 0x01
/ Half duplex / / / Full duplex
/ / ME ehternet pinagem NIC sbit sfr SPI_Ethernet_Rst em RC0_bit; sbit sfr SPI_Ethernet_CS em RC1_bit; sbit sfr SPI_Ethernet_Rst_Direction em TRISC0_bit; sbit sfr SPI_Ethernet_CS_Direction em TRISC1_bit; / / Fim ethernet NIC definições
/************************************************* *********** * Cordas ROM constante * /
const unsigned char httpHeader [] = "HTTP/1.1 200 OKnContent tipo:" / / Cabeçalho HTTP const unsigned char / / Tipo de MIME HTML const unsigned char
httpMimeTypeHTML [] = "text / htmlnn";
httpMimeTypeScript [] = "text plainnn /";
/ / Tipo MIME TEXTO unsigned char HttpMethod [] = "GET /"; / * * Página web, divididos em 2 partes: * Quando chegar curto de ROM, os dados fragmentado é tratado mais efi-
cientemente pelo linker * * Esta página HTML chama as placas para obter o seu estatuto, e constrói
se com javascript * /
const char * Indexpage = / / Mude o endereço IP da página para ser atualizada "<meta Http-equiv="refresh" content="3;url=http://192.168.20.60">
470
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
<HTML> <HEAD> </ HEAD> <BODY> <h1> PIC + ENC28J60 mini servidor web </ h1> <a href=/> Recarregar </ a> src=/s> <script </ script> <table> <td valign=top> borda da tabela <= 1 style = "font-size: 20px ; Font-family: terminal "> <th <tr> colspan=2> ADC </ th> </ tr> <tr> <td> AN2 </ td> <script> document.write (AN2) </ script> </ td> </ tr> <tr> <td> AN3 </ td> <script> document.write (AN3) </ script> </ td> </ tr> </ Table> </ td> borda da tabela <= 1 style = "font-size: 20px; font-family: terminal "> <tr> <th colspan=2> PORTB </ th> </ tr> <script> var str, i; str = ""; for (i = 0; i <8; i + +) {Str + = "<td bgcolor=pink> # botão" + i + "</ td>"; if (PORTB e (1 <<i)) {str + = "<td bgcolor=red> ON";} mais {Str + = "<td bgcolor=#cccccc> OFF";} str +="</ td> </ tr ";} document.write (str); </ Script> ";
const char
* IndexPage2 = "</ table> </ td>
<Table border = 1 style = "font-size: 20px ; Font-family: terminal "> <tr> <th colspan=3> PORTD </ th> </ tr> <script> var str, i; str = ""; for (i = 0; i <8; i + +) {Str + = "bgcolor=yellow> <td LED #" + i + "</ td>"; if (PORTD & (1 <<i)) {str + = "<td bgcolor=red> ON";} mais {Str + = "<td bgcolor=#cccccc> OFF";} str +="</ td> <a href = / t "+ i +"> Toggle </ a> </ td> </ tr ";} document.write (str); </ Script> </ Table> </ td> </ tr> </ table> Este é requisição HTTP # <script> Document.write (REQ) </ script> </ BODY> </ HTML> ";
/*********************************** RAM variáveis * * /
unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f}; / / Meu endereço MAC unsigned char / / IP do meu endereço unsigned char
myIpAddr [4] = {192, 168, 20, 60};
GetRequest [15] / / buffer solicitação HTTP
Mikroelektronika - Soluções de software e hardware para o mundo embutido 471
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
unsigned char unsigned long
mikroC PRO para PIC
dyna [30]; / / buffer para a resposta dinâmica httpCounter = 0 / / contador de requisições HTTP
/******************************************* * funções * /
/ * * Colocar a string constante apontada por s ao ENC buffer de transmissão. * /
/ * PutConstString unsigned int (const char * s) { ctr unsigned int = 0;
while (* s)
{ Spi_Ethernet_putByte (* s + +); ctr + +; }
retorno (CTR); } / *
/ * * Ele vai ser muito mais rápido de usar a biblioteca Spi_Ethernet_putConstString
rotina * Em vez de putConstString rotina acima. No entanto, o código será
ser um pouco * Pouco maior. O usuário deve escolher entre tamanho e velocidade e escolher o implementação que suites * best-lo. Se você optar por ir com o def-putConstString
rial acima * A linha # define abaixo devem ser comentadas. * * /
# Define putConstString SPI_Ethernet_putConstString
/ * * Colocar a string apontada por s ao ENC buffer de transmissão * /
/ * PutString unsigned int (char * s) { ctr unsigned int = 0;
while (* s)
{ Spi_Ethernet_putByte (* s + +);
ctr + +; }
retorno (CTR); } / *
472 Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
/ * * Ele vai ser muito mais rápido de usar a biblioteca Spi_Ethernet_putString rou-
dente * Em vez de putString rotina supra. No entanto, o código será uma
pouco * Pouco maior. O usuário deve escolher entre tamanho e velocidade e escolher o implementação que suites * best-lo. Se você optar por ir com a definição putString-
ção acima * A linha # define abaixo devem ser comentadas para fora. * * /
# Define putString SPI_Ethernet_putString
/ * * Esta função é chamada pela biblioteca * O usuário acessa o pedido HTTP por chamadas sucessivas para
Spi_Ethernet_getByte () * O usuário coloca os dados no buffer de transmissão por chamadas sucessivas para
Spi_Ethernet_putByte () * A função deve retornar o tamanho em bytes da resposta HTTP,
ou 0 se nada para transmitir * * Se você não precisa de responder a pedidos HTTP, * Apenas definir essa função com um return (0) como única instrução * * /
unsigned int SPI_Ethernet_UserTCP (unsigned char * RemoteHost, unsigned int RemotePort, unsigned int localPort, unsigned int reqLength)
{ unsigned int unsigned int
len = 0; / / comprimento resposta minha i / / inteiro de uso geral
if (localPort! = 80) / / Eu ouço apenas para solicitação da web na porta 80
{ return (0); }
/ / Obtém 10 bytes primeiro, somente o pedido, o resto não
importa aqui for (i = 0; i <10; i + +)
{ GetRequest [i] = SPI_Ethernet_getByte (); }
GetRequest [i] = 0;
if (memcmp (GetRequest, HttpMethod, 5))
método é suportado aqui {
/ / Só Começar
Mikroelektronika - Soluções de software e hardware para o mundo embutido 473
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
return (0); }
mikroC PRO para PIC
httpCounter + +;
/ / Mais um pedido feito
if (GetRequest [5] 's' ==) / / se o nome do caminho começa a pedido
com s, armazenamento de dados dinâmicos buffer de transmissão { / / A string de texto respondeu por essa solicitação pode ser
interpretadas como declarações de javascript / / Por navegadores
putConstString len = (httpHeader); / / cabeçalho HTTP len + = putConstString (httpMimeTypeScript) / / com
tipo MIME de texto
/ / Adiciona valor AN2 para responder IntToStr (ADC_Read (2), Dyna); len + = putConstString (AN2 var = "); len + = putString (Dyna); len + = (";"); putConstString
/ / Adiciona valor AN3 para responder IntToStr (ADC_Read (3), Dyna); len + = putConstString ("AN3 var ="); len + = putString (Dyna); len + = (";"); putConstString
/ / Adiciona valor PORTB (botões) para responder len + = putConstString (PORTB var = "); IntToStr (PORTB, Dyna); len + = putString (Dyna); len + = (";"); putConstString
/ / Adiciona valor PORTD (LEDs) para responder len + = putConstString ("PORTD var ="); IntToStr (PORTD, dyna); len + = putString (Dyna); len + = (";"); putConstString
/ / Adiciona os pedidos HTTP contador para responder IntToStr (httpCounter, Dyna); len + = putConstString (REQ var = "); len + = putString (Dyna); len + = (";"); putConstString }
else if (GetRequest [5] == 't') / / se o nome do caminho começa a pedido com t, alternar PORTD número de bits (LED) que vem depois
{ unsigned char bitmask = 0; / máscara de bits para
474 Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
if (GetRequest (isdigit [6])) / / se 0 <= número de bits <= 9, 8 e 9 bits não existe, mas não matéria
{ bitmask GetRequest = [6] - '0 '; / / converter
ASCII para um inteiro máscara de bits = 1 <bitmask </ / criar máscara de bits PORTD ^ = bitmask; / alternar / PORTD com xor
operador }
}
if (len == 0) / / o que fazer para por defeito
{ putConstString len = (httpHeader); http / / cabeçalho
len + = putConstString (httpMimeTypeHTML) / / com HTML tipo MIME
len + = putConstString (indexpage); / primeira página HTML parte
len + = putConstString (indexPage2); / seg página HTML parte ond
}
retorno (len); / / retorna para a biblioteca com o número de
bytes para transmitir }
/ * * Esta função é chamada pela biblioteca * O usuário acessa o pedido UDP por chamadas sucessivas para
Spi_Ethernet_getByte () * O usuário coloca os dados no buffer de transmissão por chamadas sucessivas para
Spi_Ethernet_putByte () * A função deve retornar o tamanho em bytes da resposta UDP, ou
0 se nada para transmitir * * Se você não precisa responder aos pedidos UDP, * Apenas definir essa função com um return (0) como única instrução * * /
unsigned int SPI_Ethernet_UserUDP (unsigned char * RemoteHost, unsigned int RemotePort, unsigned int destPort, unsigned int reqLength)
{ unsigned int unsigned char
len / / comprimento resposta minha * Ptr; / / ponteiro para o buffer dinâmico
/ / Resposta é feito do endereço IP do host remoto de seres humanos, leia-
capaz formato ByteToStr (remoteHost [0], Dyna) / / byte primeiro endereço IP dyna [3] = '.';
Mikroelektronika - Soluções de software e hardware para o mundo embutido 475
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
ByteToStr (remoteHost [1], dyna + 4) / / segundo dyna [7] = '.'; ByteToStr (remoteHost [2], dyna + 8) / / terceiro dyna [11] = '.'; ByteToStr (remoteHost [3], dyna + 12) / / quarta
dyna [15] = ':';
/ / Adiciona o separador
/ / Número da porta, em seguida, o anfitrião remoto WordToStr (RemotePort, dyna + 16); dyna [21] '['; WordToStr (destPort, dyna + 22); dyna [27] ']'; dyna [28] = 0;
/ / O comprimento total do pedido é o comprimento do
seqüência dinâmica mais o texto do pedido len = 28 + reqLength;
/ / Coloca a corda dinâmica no buffer de transmissão SPI_Ethernet_putBytes (dyna, 28);
/ / Em seguida, coloca a corda pedido convertido em alta char
para o buffer de transmissão while (reqLength -)
{ SPI_Ethernet_putByte (toupper (SPI_Ethernet_getByte ()));
}
retorno (len);
resposta UDP }
/ * * Entrada principal * /
/ / Volta para a biblioteca com o comprimento do
vazio main () { ANSEL = 0x0C; PORTA = 0; TRISA = 0xff;
ANSELH = 0; PORTB = 0; TRISB = 0xff;
PORTD = 0; TRISD = 0;
/ *
/ / AN2 e AN3 conversores serão utilizados
/ / Define PORTA como entrada para o ADC / / Configure outras AN pinos como I / O digital / PORTB set / como entrada para os botões / / Set PORTD como saída
476 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
* ENC28J60 começa com: * Pouco Reiniciado em RC0 * CS em pouco RC1 * Meu MAC e endereço IP * Full duplex * /
SPI1_Init (); SPI_Ethernet_Init (myMacAddr, myIpAddr, Spi_Ethernet_FULLDU-
PLEX);
while (1)
/ / Faz para sempre
{ / * * Se necessário, teste o valor de retorno para obter o código de erro * /
SPI_Ethernet_doPacket (); / processo / incoming pacotes Ethernet
/ * * Adicionar suas coisas aqui, se necessário * Spi_Ethernet_doPacket () deve ser chamado o mais rápido possível * Caso contrário, os pacotes podem ser perdidos * /
} }
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
477
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Conexão HW
mikroC PRO para PIC
478
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
SPI biblioteca gráfica LCD
A mikroC PRO para PIC fornece uma biblioteca para operacional 128x64 gráfico LCD (com comumente usado Samsung controlador KS108/KS107) via interface SPI.
Para criar um conjunto personalizado de imagens GLCD uso GLCD Bitmap Editor Tool.
Nota: A biblioteca utiliza o módulo de comunicação SPI. O usuário deve inicializar o SPI módulo antes de usar o SPI LCD Gráfico Biblioteca. Para MCUs com dois módulos SPI é possível inicializar ambos e, em seguida, switch usando o SPI_Set_Active () rotina.
Nota: Esta biblioteca é projetado para trabalhar com o LCD serial mikroElektronika's / GLCD Pinagem do adaptador de mesa, ver esquema na parte inferior da página para obter mais detalhes.
As dependências externas do SPI LCD Gráfico Biblioteca
A implementação do SPI Gráfica rotinas Lcd Biblioteca é baseado em Port Expander Biblioteca de rotinas.
As dependências externas são as mesmas dependências do Porto Biblioteca Expander externa- CIES.
Rotinas da biblioteca
rotinas básicas:
- - - - - -
SPI_Glcd_Init SPI_Glcd_Set_Side SPI_Glcd_Set_Page SPI_Glcd_Set_X SPI_Glcd_Read_Data SPI_Glcd_Write_Data
rotinas avançadas:
- - - - - - - -
SPI_Glcd_Fill SPI_Glcd_Dot SPI_Glcd_Line SPI_Glcd_V_Line SPI_Glcd_H_Line SPI_Glcd_Rectangle SPI_Glcd_Box SPI_Glcd_Circle
Mikroelektronika - Soluções de software e hardware para o mundo embutido 479
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Init (DeviceAddress char);
Retorna Nada.
Descrição
Inicializa o módulo GLCD via interface SPI.
Parâmetros:
- DeviceAddress: endereço de hardware spi expansor, ver esquema na final desta página
Requer
As variáveis globais:
- SPExpanderCS: Chip Selecionar linha - SPExpanderRST: linha de reset - SPExpanderCS_Direction: Direção do pino de Chip Select - SPExpanderRST_Direction: Direção do pino de Reset
deve ser definida antes usar essa função.
O módulo SPI precisa ser inicializado. Veja SPI1_Init e SPI1_Init_Advanced rotinas.
Exemplo
/ / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander
...
/ / Se a porta Expander Biblioteca utiliza o módulo SPI: SPI1_Init (); / / Inicializar SPI módulo usado com PortExpander SPI_Glcd_Init (0);
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
- - - -
SPI_Glcd_Set_Font SPI_Glcd_Write_Char SPI_Glcd_Write_Text SPI_Glcd_Image
Spi_Glcd_Init
480
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Set_Side (char x_pos;
Retorna Nada.
Descrição
Seleciona lado GLCD. Consulte a ficha GLCD para explicação detalhe.
Parâmetros:
- X_pos: posição no eixo-x. Valores válidos: 0 .. 127
O parâmetro x_pos especifica o lado GLCD: valores 0-63 especificar o lado esquerdo, os valores de 64-127 especificar o lado direito.
Nota: Para lateral, eixo x e explicação de layout de página ver esquema em
baixo Requer GLCD precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Glcd_Init.
Exemplo
As duas linhas seguintes são equivalentes, e ambos selecione no lado esquerdo da GLCD:
SPI_Glcd_Set_Side (0); SPI_Glcd_Set_Side (10);
Protótipo vazio SPI_Glcd_Set_Page (char página);
Retorna Nada.
Descrição
Seleciona a página de GLCD.
Parâmetros:
- Página: número da página. Valores válidos: 0 .. 7
Nota: Para lateral, eixo x e explicação de layout de página ver esquema em
baixo Requer GLCD precisa ser inicializado para comunicação SPI, consulte rotinas SPI_Glcd_Init.
Exemplo SPI_Glcd_Set_Page (5);
CAPÍTULO 7
mikroC PRO para PIC
SPI_Glcd_Set_Side
SPI_Glcd_Set_Page
Bibliotecas
Mikroelektronika - Software e Soluções de hardware para Embedded World
481
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Set_X (char x_pos);
Retorna Nada.
Descrição
Define eixo-x posição de x_pos pontos a partir da margem esquerda do GLCD dentro do select- lado ed.
Parâmetros:
- X_pos: posição no eixo-x. Valores válidos: 0 .. 63
Nota: Para lateral, eixo x e explicação de layout de página ver esquema em
Requer GLCD necessidades para ser inicializado para a comunicação SPI, consulte rotinas SPI Gl d I it Exemplo SPI_Glcd_Set_X (25);
Protótipo char SPI_Glcd_Read_Data ();
Retorna Um byte de memória GLCD.
Descrição Lê os dados a partir da localização atual do GLCD memória e move-se para o próximo L l
Requer GLCD precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Glcd_Init.
lado GLCD posição, eixo-x e de página deve ser definido primeiro. Veja as
funções Exemplo
char dados; ... = dados SPI_Glcd_Read_Data ();
CAPÍTULO 7 Bibliotecas
SPI_Glcd_Set_X
Spi_Glcd_Read_Data
mikroC PRO para PIC
482
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Write_Data (char Ddata);
Retorna Nada.
Descrição
Grava um byte para a posição atual em GLCD memória e move-se para a próxima Local.
Parâmetros:
- Ddata: dados a serem gravados
Requer GLCD precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Glcd_Init.
lado GLCD posição, eixo-x e de página deve ser definido primeiro. Veja as
funções Exemplo
char dados; ... SPI_Glcd_Write_Data (dados);
Protótipo vazio SPI_Glcd_Fill (char padrão);
Retorna Nada.
Descrição
Preenche com o byte de memória GLCD padrão.
Parâmetros:
- Padrão: byte de memória para preencher GLCD com
Para limpar a tela GLCD, use SPI_Glcd_Fill (0).
Para preencher a tela completamente, use SPI_Glcd_Fill (0xFF).
Requer GLCD precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Glcd_Init.
Exemplo / / Limpar ecrã SPI_Glcd_Fill (0);
CAPÍTULO 7
mikroC PRO para PIC
SPI_Glcd_Write_Data
SPI_Glcd_Fill
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
483
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Line (int x_start, int y_start, int x_end, int y_end, char cor);
Retorna Nada.
Descrição
Desenha uma linha na GLCD.
Parâmetros:
- X_start: coordenada x do linha de partida. Valores válidos: 0 .. 127 - Y_start: coordenada y do início da linha. Valores válidos: 0 .. 63 - X_end: coordenada x da extremidade da linha. Valores válidos: 0 .. 127 - Y_end: coordenada y da linha final. Valores válidos: 0 .. 63 - Cor: parâmetro cor. Valores válidos: 0 .. 2
Parâmetro cor determina a cor da linha: 0 branco, 1 preto e 2 inverte cada dot Requer GLCD precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Glcd_Init.
Exemplo / / Desenha uma linha entre os pontos (0,0) e (20,30) SPI_Glcd_Line (0, 0; 20, 30, 1);
Protótipo vazio SPI_Glcd_Dot (char x_pos, char y_pos, char cor);
Retorna Nada.
Descrição
Desenha um ponto na GLCD nas coordenadas (x_pos, y_pos).
Parâmetros:
- x_pos: x posição. Valores válidos: 0 .. 127 - y_pos: y posição. Valores válidos: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina o ponto estado: 0 limpa ponto, um coloca um ponto, e 2 inverte ponto estado.
Nota: Para x e explicação layout eixo y ver esquema na parte inferior desta página.
Requer GLCD necessidades para ser inicializado para a comunicação SPI, consulte rotinas SPI Gl d I it Exemplo / / Inverter o ponto no canto superior esquerdo SPI_Glcd_Dot (0, 0, 2);
CAPÍTULO 7 Bibliotecas
SPI_Glcd_Dot
SPI_Glcd_Line
mikroC PRO para PIC
484
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_H_Line (char x_start, char x_end, char y_pos, char cor);
Retorna Nada.
Descrição
Desenha uma linha horizontal sobre GLCD.
Parâmetros:
- x_start: coordenada x do início da linha. Valores válidos: 0 .. 127 - x_end: coordenada x da extremidade da linha. Valores válidos: 0 .. 127 - y_pos: coordenada y da linha horizontal. Valores válidos: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor da linha: 0 branco, 1 preto e 2 inverte d t Requer GLCD precisa ser inicializado para a comunicação SPI, ver SPI_Glcd_Init rotinas.
Exemplo / / Desenha uma linha horizontal entre os pontos (10,20) e (50,20) SPI_Glcd_H_Line (10, 50, 20, 1);
Protótipo vazio SPI_Glcd_V_Line (char y_start, char y_end, char x_pos, char cor);
Retorna Nada.
Descrição
Desenha uma linha vertical na GLCD.
Parâmetros:
-Y_start: coordenada y do início da linha. Valores válidos: 0 .. 63 - y_end: coordenada y da linha final. Valores válidos: 0 .. 63 - x_pos: coordenada x da linha vertical. Valores válidos: 0 .. 127 - cor: parâmetro de cor. Valores válidos: 0 .. 2
Parâmetro cor determina a cor da linha: 0 branco, 1 preto e 2 inverte cada ponto.
Requer GLCD precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Glcd_Init.
Exemplo / / Desenha uma linha vertical entre os pontos (10,5) e (10,25) SPI_Glcd_V_Line (5, 25, 10, 1);
CAPÍTULO 7
mikroC PRO para PIC
SPI_Glcd_V_Line
SPI_Glcd_H_Line
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
485
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Rectangle (char x_upper_left, char y_upper_left, char x_bottom_right, char y_bottom_right, char cor);
Retorna Nada.
Descrição
Desenha um retângulo na GLCD.
Parâmetros: - x_upper_left: coordenada x do canto superior esquerdo do retângulo. Valores válidos: 0 .. 127 - y_upper_left: coordenada y do canto superior esquerdo do retângulo. Valores válidos: 0 .. 63 - x_bottom_right: coordenada x menor canto direito do retângulo. Válido val- ues: 0 .. 127 - y_bottom_right: coordenada y do canto inferior direito do retângulo. Válido val- ues: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
Requer GLCD precisa ser inicializado para a comunicação SPI, consulte rotinas Spi_Glcd_Init.
Exemplo / / Desenha uma caixa entre os pontos (5,15) e (20,40) Spi_Glcd_Box (5, 15, 20, 40, 1);
Protótipo vazio SPI_Glcd_Box (char x_upper_left, char y_upper_left, char x_bottom_right, char y_bottom_right, char cor);
Retorna Nada.
Descrição
Desenha uma caixa de GLCD.
Parâmetros: - x_upper_left: coordenada x da caixa de canto superior esquerdo. Valores válidos: 0 .. 127 - y_upper_left: y coordenadas do canto superior esquerdo caixa. Valores válidos: 0 .. 63 - x_bottom_right: coordenada x do canto inferior direito caixa. Valores válidos: 0 .. 127 - y_bottom_right: coordenada y do canto inferior direito caixa. Valores válidos: 0 .. 63 - cor: parâmetro de cor. Valores válidos: 0 .. 2
Requer GLCD precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Glcd_Init.
Exemplo / / Desenha uma caixa entre os pontos (5,15) e (20,40) SPI_Glcd_Box (5, 15, 20, 40, 1);
CAPÍTULO 7 Bibliotecas
SPI_Glcd_Rectangle
SPI_Glcd_Box
mikroC PRO para PIC
486
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Set_Font (código const char * ActiveFont, char aFontWidth, char aFontHeight, unsigned int aFontOffs);
Retorna Nada.
Descrição
Define a fonte que será usada com SPI_Glcd_Write_Char e SPI_Glcd_Write_Text rotinas.
Parâmetros:
- activeFont: fonte a ser definido. Precisa ser formatado como uma
matriz de char - aFontWidth: largura dos caracteres da fonte em pontos. - aFontHeight: altura dos caracteres da fonte em pontos. - aFontOffs: número que representa a diferença entre o mikroC PRO char- cional conjunto e definir ASCII regular (por exemplo, se 'A' é 65 de caracteres ASCII, e "A" é de 45 no conjunto de caracteres mikroC PRO, aFontOffs é 20). Demo fornecido com fontes a biblioteca tem um deslocamento de 32 o que significa que eles começam com o
Requer GLCD precisa ser inicializado para a SPI comunicação, consulte rotinas SPI_Glcd_Init.
Exemplo / / Use o costume 5x7 fonte "MyFont", que começa com o espaço (32): SPI_Glcd_Set_Font (MyFont, 5, 7, 32);
Protótipo vazio SPI_Glcd_Circle (int x_center, int y_center, int raio, char cor);
Retorna Nada.
Descrição
Desenha um círculo em GLCD.
Parâmetros: - x_center: coordenada x do centro do círculo. Valores válidos: 0 .. 127 - y_center: coordenada y do centro do círculo. Valores válidos: 0 .. 63 - Raio: Raio de tamanho - cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor da linha do círculo: 0 branco, um negro, 2 i t d t Requer GLCD precisa ser inicializado para a comunicação SPI, ver SPI_Glcd_Init rotina.
Exemplo / / Desenha um círculo com centro em (50,50) e raio = 10 SPI_Glcd_Circle (50, 50, 10, 1);
CAPÍTULO 7
mikroC PRO para PIC
SPI_Glcd_Circle
SPI_Glcd_Set_Font
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
487
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Write_Char (char Chr1, char x_pos, char page_num, char cor);
Retorna Nada.
Descrição
Imprime personagem em GLCD.
Parâmetros:
- Chr1: caractere a ser escrito - x_pos: posição do caractere a partir de eixo-x. Valores válidos: 0 .. (127-FontWidth) - page_num: o número da página na qual personagem vai ser escrito. Válido
valores: 0 .. 7 - cor: cor parâmetro. Valores válidos: 0 .. 2
O parâmetro cor determina a cor do personagem: 0 branco, um negro, e 2 inverte cada ponto.
Nota: Para eixo x e explicação de layout de página ver esquema na parte inferior
da
Requer GLCD precisa ser inicializado para comunicação SPI, consulte rotinas SPI_Glcd_Init.
Use o SPI_Glcd_Set_Font para especificar a fonte para exibição, se nenhuma fonte é
especificada Exemplo / / Escreve 'C' personagem no posição 10 no interior da página 2:
SPI_Glcd_Write_Char ('C', 10, 2, 1);
CAPÍTULO 7 Bibliotecas
Spi_Glcd_Write_Char
mikroC PRO para PIC
488
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Write_Text (char [texto] char x_pos, char page_num, char cor);
Retorna Nada.
Descrição
Imprime texto na GLCD.
Parâmetros:
- texto: texto a ser escrito - x_pos: posição do texto a partir de eixo-x. - page_num: o número da página onde o texto será escrito. Valores válidos: 0 .. 7 Cor: parâmetro de cor. Valores válidos: 0 .. 2
O parâmetro cor determina a cor do texto: 0 branco, um preto, e 2 inverte cada ponto.
Nota: Para eixo x e explicação de layout de página ver esquema na parte inferior
da
Requer GLCD precisa ser inicializado para a comunicação SPI, ver SPI_Glcd_Init rotinas.
Use o SPI_Glcd_Set_Font para especificar a fonte para exibição, se nenhuma fonte é
especificada Exemplo / / Escreve o texto "Olá mundo!" na posição 10 no interior da página 2:
SPI_Glcd_Write_Text ("Olá mundo!", 10, 2, 1);
CAPÍTULO 7
mikroC PRO para PIC
Spi_Glcd_Write_Text
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
489
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Glcd_Image (código const char * Imagem);
Retorna Nada.
Descrição
Exibe bitmap em GLCD.
Parâmetros:
- imagem: imagem a ser exibida. matriz de bitmap podem ser localizados em ambos os
códigos e Memória RAM (devido à mikroC PRO PIC para ponteiro para ponteiro para const e RAM de equivalência).
Use o mikroC PRO opção integrada GLCD Bitmap Editor ( Ferramentas >
Requer GLCD precisa ser inicializado para comunicação SPI, consulte rotinas SPI_Glcd_Init.
Exemplo / / Desenha my_image imagem GLCD SPI_Glcd_Image (my_image);
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Spi_Glcd_Image
Exemplo Biblioteca
O exemplo demonstra como se comunicar com KS0108 GLCD através do módulo SPI, usando seri- al de paralela conversor MCP23S17.
const char código truck_bmp [1024];
/ / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander
vazio Delay2s () {
/ / 2 segundos, função de atraso
Delay_ms (2000); }
vazio main () {
char * SomeText; char contador;
/ / Se a porta Expander Library usa SPI1 módulo SPI1_Init (); / / Inicializar SPI módulo usado com PortExpander
/ /
490
/ / Se a porta Expander Biblioteca utiliza o módulo SPI2
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
/ / SPI2_Init ();
/ / Inicializar SPI módulo usado com PortExpander
SPI_Glcd_Init (0); SPI_Glcd_Fill (0x00);
while (1) {
SPI_Glcd_Image (truck_bmp); Delay2s (); Delay2s ();
SPI_Glcd_Fill (0x00); Delay2s;
/ / Inicializar GLCD via SPI / / Limpar GLCD
/ / Desenha a imagem
/ / Limpar GLCD
SPI_Glcd_Box (62,40,124,56,1); SPI_Glcd_Rectangle (5,5,84,35,1); SPI_Glcd_Line (0, 63, 127, 0,1); Delay2s ();
for (contador = 5; contador <60; contador + = 5) {
linha tal e vertical Delay_ms (250); SPI_Glcd_V_Line (2, 54, contador, 1); SPI_Glcd_H_Line (2, 120, contador, 1); }
Delay2s ();
/ / Desenha caixa / / Desenha retângulo / / Desenha uma linha / / Desenha horizonte
SPI_Glcd_Fill (0x00); SPI_Glcd_Set_Font (Character8x7, 8, 8, 32);
__Lib_GLCDFonts.c Na pasta Usos SPI_Glcd_Write_Text ("mikroE", 5, 7, 2);
para (Contador = 1; contador <= 10; contador + +)
SPI_Glcd_Circle (63,32, 3 * contador, 1); Delay2s ();
SPI_Glcd_Box (12,20, 70,63, 2); Delay2s ();
SPI_Glcd_Fill (0xFF);
SPI_Glcd_Set_Font (Character8x7, 8, 7, 32); someText = "8x7 Fonte"; SPI_Glcd_Write_Text (someText, 5, 1, 2); Delay2s ();
SPI_Glcd_Set_Font (System3x5, 3, 5, 32);
someText = "3X5 Únicas capitais "; SPI_Glcd_Write_Text (someText, 5, 3, 2); Delay2s ();
/ / Limpar GLCD / Font Escolha / v.
/ / Escreve a string
/ / Desenha círculos
/ / Desenha caixa
/ / Preencha GLCD / / Alterar a fonte
/ / Escreve a string
/ / Alterar a fonte
/ / Escreve a string
Mikroelektronika - Soluções de software e hardware para o mundo embutido
491
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
SPI_Glcd_Set_Font (font5x7, 5, 7, 32); someText = "Fonte 5x7"; SPI_Glcd_Write_Text (someText, 5, 5, 2);
mikroC PRO para PIC
/ / Alterar a fonte / / Escreve a string
Delay2s ();
SPI_Glcd_Set_Font (FontSystem5x7_v2, 5, 7, 32); / font / Alterar someText = "5x7 Fonte (v2)"; SPI_Glcd_Write_Text (someText, 5, 7, 2) / / Escreve o texto Delay2s ();
}
}
Conexão HW
SPI GLCD conexão HW
492
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
SPI LCD BIBLIOTECA
A mikroC PRO para PIC fornece uma biblioteca para comunicação com LCD (com controladores HD44780 compatível) em modo de 4 bits via interface SPI.
Para criar um conjunto personalizado de caracteres LCD usam LCD personalizado Personagem Tool.
Nota: A biblioteca utiliza o módulo de comunicação SPI. O usuário deve inicializar o SPI módulo antes de usar o SPI Lcd Biblioteca. Para MCUs com dois módulos SPI é possível inicializar ambos e, em seguida, switch usando o SPI_Set_Active () rotina.
Nota: Esta biblioteca é projetado para trabalhar com o LCD serial mikroElektronika's Adaptador Câmara pinagem. Veja esquema na parte inferior da página para obter mais detalhes.
As dependências externas do SPI LCD Biblioteca
A implementação de rotinas Lcd Biblioteca SPI é baseado em Port Expander Biblioteca rotinas.
As dependências externas são as mesmas dependências do Porto Biblioteca Expander externa- CIES.
Rotinas da biblioteca
- - - - - -
SPI_Lcd_Config SPI_Lcd_Out SPI_Lcd_Out_Cp SPI_Lcd_Chr SPI_Lcd_Chr_Cp SPI_Lcd_Cmd
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
493
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Lcd_Config (char DeviceAddress);
Retorna Nada.
Descrição
Inicializa o módulo LCD via interface SPI.
Parâmetros:
- DeviceAddress: endereço de hardware spi expansor, ver esquema na final desta página
Requer
As variáveis globais:
- SPExpanderCS: Chip Selecionar linha - SPExpanderRST: linha de reset - SPExpanderCS_Direction: Direção do Chip Pin Select - SPExpanderRST_Direction: Direção do pino de Reset
devem ser definidas antes de utilizar esta função.
O módulo SPI precisa ser inicializado. Veja SPI1_Init e SPI1_Init_Advanced rotinas.
Exemplo
/ / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander
vazio main () {
/ / Se a porta Expander Biblioteca utiliza o módulo SPI SPI1_Init (); / / Inicializar SPI módulo usado com PortExpander SPI_Lcd_Config (0); / / inicializa Lcd sobre o SPI interface
CAPÍTULO 7 Bibliotecas
Spi_Lcd_Config
mikroC PRO para PIC
494
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Lcd_Out (char linha, char coluna, char * Texto);
Retorna Nada.
Descrição
Imprime texto na tela LCD a partir de determinada posição. Ambas as variáveis string e literais podem ser passados como um texto.
Parâmetros: - linha: número da linha de partida posição - coluna: número da coluna a partir posição t t it Requer Lcd precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Lcd_Config.
Exemplo / / Escreve o texto "Olá!" no LCD a partir da linha 1, coluna 3: SPI_Lcd_Out (1, 3, "Olá!");
Protótipo vazio SPI_Lcd_Out_CP (char * Texto);
Retorna Nada.
Descrição
Imprime texto na tela LCD na posição atual do cursor. Ambas as variáveis string e-litro als pode ser passado como um texto.
Parâmetros: Requer Lcd precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Lcd_Config.
Exemplo / / Escreve o texto "Aqui!" na posição atual do cursor: SPI_Lcd_Out_CP ("Aqui!");
CAPÍTULO 7
mikroC PRO para PIC
Spi_Lcd_Out
Spi_Lcd_Out_Cp
Spi_Lcd_Chr
Bibliotecas
Protótipo Retorna
Descrição
Requer
Exemplo
vazio SPI_Lcd_Chr (char Row, char Coluna, char Out_Char);
Nada.
Imprime caracteres em LCD na posição especificada. Ambas as variáveis e literais pode ser passado como personagem. Parâmetros: - Linha: escrever o número da linha a posição - Coluna: escrever o número da coluna posição - Out_Char: caractere a ser escrito Lcd precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Lcd_Config. / / Escreve caráter "I" na linha 2, coluna 3: SPI_Lcd_Chr (2, 3, 'i');
Mikroelektronika - Soluções de software e hardware para o mundo embutido
495
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Lcd_Cmd (char out_char);
Retorna Nada.
Descrição
Envia comando para LCD.
Parâmetros:
- out_char: comando a ser enviado
Nota: Constantes pré-definidas podem ser passados para a função, consulte
Disponível Lcd
Requer Lcd precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Lcd_Config.
Exemplo / / Clear LCD: SPI_Lcd_Cmd (_LCD_CLEAR);
Protótipo vazio SPI_Lcd_Chr_CP (char Out_Char);
Retorna Nada.
Descrição
Imprime caracteres em LCD na posição atual do cursor. Ambas as variáveis e literais pode ser passado como personagem.
Parâmetros:
O t Ch t d Requer Lcd precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Lcd_Config.
Exemplo / / Escrever "e" caractere na posição atual do cursor: SPI_Lcd_Chr_Cp ('e');
CAPÍTULO 7 Bibliotecas
Spi_Lcd_Chr_Cp
Spi_Lcd_Cmd
mikroC PRO para PIC
496
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Lcd Comando Finalidade LCD_FIRST_ROW Move o cursor para a linha 1
LCD_SECOND_ROW Move o cursor para a linha 2
LCD_THIRD_ROW Move o cursor para a 3 ª fila
LCD_FOURTH_ROW Move o cursor para a linha 4
LCD_CLEAR O visor claro
LCD_RETURN_HOME Retornar cursor para a posição inicial, retorna uma tela mudou i i i l M d d RAM é f d LCD_CURSOR_OFF Desligue o cursor
LCD_UNDERLINE_ON Sublinhar o cursor em
LCD_BLINK_CURSOR_ON Intermitência do cursor em
LCD_MOVE_CURSOR_LEFT Move o cursor para esquerda sem alterar RAM exibir d d LCD_MOVE_CURSOR_RIGHT Mover cursor para direita sem alterar RAM exibir dados
LCD_TURN_ON Vire a tela LCD
LCD_TURN_OFF Ligue o monitor LCD
LCD_SHIFT_LEFT Shift display esquerdo sem alterar a RAM de dados de ibi ã LCD_SHIFT_RIGHT Shift direito de exibição sem alterar RAM exibição de dados
CAPÍTULO 7
mikroC PRO para PIC
Disponível Comandos LCD
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
497
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca Este exemplo demonstra como se comunicar através do módulo de LCD SPI, utilizando conversor de serial para paralelo MCP23S17. char * Texto = "mikroElektronika"; / / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander
vazio main () {
/ / Se a porta Expander Library usa SPI1 módulo SPI1_Init (); / / Inicializar SPI módulo usado com PortExpander
/ / Se a porta Expander Biblioteca utiliza o módulo SPI2 / / SPI2_Init (); / / Inicializar SPI módulo usado com PortExpander
SPI_Lcd_Config (0); / / interface de inicialização do LCD sobre o SPI SPI_Lcd_Cmd (_LCD_CLEAR); / / exibe Limpar SPI_Lcd_Cmd (_LCD_CURSOR_OFF); / cursor Rode / off SPI_Lcd_Out (1,6 ", mikroE"); / Imprimir texto para LCD, 1 linha, 6 col-
umn SPI_Lcd_Chr_CP ('!'); / Anexar '!' SPI_Lcd_Out (2,1, texto); / Imprimir texto / ao LCD, linha 2, coluna 1
}
/ / SPI_Lcd_Out (3,1 ", mikroE"); / / SPI_Lcd_Out (4,15 ", mikroE");
/ / Para o LCD com mais de duas linhas / / Para o LCD com mais de duas linhas
498
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
SPI LCD conexão HW
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
499
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
SPI LCD8 (8-bit) biblioteca A mikroC PRO para PIC fornece uma biblioteca para comunicação com LCD (com controladores HD44780 compatível) em modo de 8 bits via interface SPI. Para criar um conjunto personalizado de caracteres LCD usam LCD personalizado Personagem Tool. Nota: A Biblioteca utiliza o módulo de comunicação SPI. O usuário deve inicializar o SPI módulo antes de usar o SPI Biblioteca de Lcd. Para MCUs com dois módulos SPI é possível inicializar ambos e, em seguida, switch usando o SPI_Set_Active () rotina. Nota: Esta biblioteca foi projetada para funcionar com LCD Serial mikroElektronika's / GLCD Pinagem do adaptador de mesa, ver esquema na parte inferior da página para obter mais detalhes. As dependências externas do SPI LCD Biblioteca A implementação de rotinas Lcd Biblioteca SPI é baseado em Port Expander Biblioteca rotinas. As dependências externas são as mesmas dependências do Porto Biblioteca Expander externa- CIES. Rotinas da biblioteca
- - - - - -
SPI_Lcd8_Config SPI_Lcd8_Out SPI_Lcd8_Out_Cp SPI_Lcd8_Chr SPI_Lcd8_Chr_Cp SPI_Lcd8_Cmd
500
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Lcd8_Config (char DeviceAddress);
Retorna Nada.
Descrição
Inicializa o módulo LCD via interface SPI.
Parâmetros: - DeviceAddress: endereço de hardware spi expansor, ver esquema na
final desta página
Requer
As variáveis globais: - SPExpanderCS: Chip Selecionar linha - SPExpanderRST: linha de reset - SPExpanderCS_Direction: Direção do pino de Chip Select - SPExpanderRST_Direction: Direção do pino de Reset devem ser definidas antes de utilizar esta função. O módulo SPI precisa ser inicializado. Veja SPI1_Init e SPI1_Init_Advanced rotinas.
Exemplo
/ / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander ... / / Se a porta Expander Biblioteca utiliza o módulo SPI SPI1_Init (); / / Inicializar SPI módulo usado com PortExpander SPI_Lcd8_Config (0); / intialize LCD em modo de 8 bits via SPI
Protótipo vazio SPI_Lcd8_Out (unsigned short linha, unsigned short coluna, char * Texto);
Retorna Nada.
Descrição
Imprime texto na tela LCD a partir de determinada posição. Ambos variáveis de cadeia e acendeu- rals pode ser passado como um texto.
Parâmetros:
- linha: número da linha de partida posição - coluna: número da coluna a partir posição t t it Requer Lcd precisa ser inicializado para a comunicação SPI, ver SPI_Lcd8_Config rotinas.
Exemplo / / Escreve o texto "Olá!" no LCD a partir da linha 1, coluna 3: SPI_Lcd8_Out (1, 3, "Olá!");
CAPÍTULO 7
mikroC PRO para PIC
Spi_Lcd8_Config
Spi_Lcd8_Out
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
501
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Lcd8_Chr (unsigned short linha, unsigned short coluna, char out_char);
Retorna Nada.
Descrição
Imprime caracteres em LCD na posição especificada. Ambas as variáveis e literais
podem ser passado como personagem.
Parâmetros:
- linha: escrever o número da linha a posição - coluna: escrever o número da coluna posição t it Requer Lcd precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Lcd8_Config.
Exemplo / / Escreve caracter "i" na linha 2, coluna 3: SPI_Lcd8_Chr (2, 3, 'i');
Protótipo vazio SPI_Lcd8_Chr_CP (char out_char);
Retorna Nada.
Descrição
Imprime caracteres em monitores LCD na posição atual do cursor. Ambas as variáveis e literais pode ser passado como personagem.
Parâmetros:
t t t t it Requer Lcd precisa ser inicializado para a comunicação SPI, ver SPI_Lcd8_Config rotinas.
Exemplo / / Escreve o texto "Aqui!" na posição atual do cursor: SPI_Lcd8_Out_Cp ("Aqui!");
CAPÍTULO 7 Bibliotecas
Spi_Lcd8_Out_Cp
Spi_Lcd8_Chr
mikroC PRO para PIC
502
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_Lcd8_Cmd (char out_char);
Retorna Nada.
Descrição
Envia comando para LCD.
Parâmetros:
- out_char: comando a ser enviado
Nota: Constantes pré-definidas podem ser passados para a função, consulte
Disponível LCD
Requer Lcd precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Lcd8_Config.
Exemplo / / Limpa display LCD: SPI_Lcd8_Cmd (_LCD_CLEAR);
Protótipo vazio SPI_Lcd8_Chr_CP (char out_char);
Retorna Nada.
Descrição
Imprime caracteres em LCD na posição atual do cursor. Ambas as variáveis e literais pode ser passado como personagem.
Parâmetros:
t h : caractere a ser escrito Requer Lcd precisa ser inicializado para a comunicação SPI, consulte rotinas SPI_Lcd8_Config.
Exemplo Imprimir "E" na posição atual do cursor:
/ / Escrever "e" caractere na posição atual do cursor:
SPI_Lcd8_Chr_Cp ('e');
CAPÍTULO 7
mikroC PRO para PIC
Spi_Lcd8_Chr_Cp
Spi_Lcd8_Cmd
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
503
www.mecatronicadegaragem.blogspot.com
Lcd Comando Finalidade LCD_FIRST_ROW Move o cursor para a linha 1
LCD_SECOND_ROW Move o cursor para a linha 2
LCD_THIRD_ROW Move o cursor para a 3 ª fila
LCD_FOURTH_ROW Move o cursor para a linha 4
LCD_CLEAR O visor claro
LCD_RETURN_HOME Retornar cursor para a posição inicial, retorna uma tela mudou i i i l M d d RAM é f d LCD_CURSOR_OFF Desligue o cursor
LCD_UNDERLINE_ON Sublinhar o cursor em
LCD_BLINK_CURSOR_ON Intermitência do cursor em
LCD_MOVE_CURSOR_LEFT Move o cursor para esquerda sem alterar RAM exibir d d LCD_MOVE_CURSOR_RIGHT Mover cursor para direita sem alterar RAM exibir dados
LCD_TURN_ON Vire a tela LCD
LCD_TURN_OFF Ligue o monitor LCD
LCD_SHIFT_LEFT Shift display esquerdo, sem alterar RAM exibir dados
LCD_SHIFT_RIGHT Shift direito de exibição sem alterar RAM exibição de dados
CAPÍTULO 7 Bibliotecas
Disponível Comandos LCD
mikroC PRO para PIC
504
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Exemplo Biblioteca
Este exemplo demonstra como se comunicar LCD em modo de 8 bits, através do SPI mod- ULE, usando a série paralelo conversor MCP23S17.
char * Texto = "mikroE";
/ / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander
vazio main () {
/ / Se a porta Expander Library usa SPI1 módulo SPI1_Init (); / / Inicializar SPI módulo usado com PortExpander
/ / Se o Porto Expander Biblioteca utiliza o módulo SPI2 / / SPI2_Init (); / / Inicializar SPI módulo usado com PortExpander
SPI_Lcd8_Config (0); / Intialize LCD em modo de 8 bits via SPI SPI_Lcd8_Cmd (_LCD_CLEAR); / / exibe Limpar SPI_Lcd8_Cmd (_LCD_CURSOR_OFF); / cursor Rode / off SPI_Lcd8_Out (1,6, texto); / Imprimir texto / ao LCD, linha 1, coluna 6 ... SPI_Lcd8_Chr_CP ('!'); / Anexar '!' SPI_Lcd8_Out (2,1 ", mikroElektronika"); / Imprimir texto / para LCD, 2
linha, coluna 1 ... SPI_Lcd8_Out (3,1, texto); / / Para os módulos de LCD com mais de duas linhas SPI_Lcd8_Out (4,15, texto); / / Para os módulos de LCD com mais de duas linhas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
505
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Conexão HW
LCD8 SPI conexão HW
mikroC PRO para PIC
506
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Adaptador Câ
datasheet T6369C
RS C / D
R / W / RD
E / WR
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
SPI biblioteca gráfica T6963C LCD
A mikroC PRO para PIC fornece uma biblioteca para trabalhar com base em Glcds TOSHIBA controlador T6963C via interface SPI. A Toshiba T6963C é muito po- controlador do LCD lar para a utilização em pequenos módulos gráficos. Ele é capaz de controlar telas com uma resolução de até 240x128. Devido à sua baixa potência e pequeno-out linha é o mais apropriado para aplicações móveis, como PDAs, MP3 players ou celulares equipamentos de medição. Embora este controlador é pequeno, tem uma capacidade de dis- brincando e mesclando texto e gráficos e que gere todos os sinais de interface com o exibe linhas e motoristas Coluna.
Para criar um conjunto personalizado de imagens GLCD uso GLCD Bitmap Editor Tool.
Nota: A biblioteca utiliza o módulo de comunicação SPI. O usuário deve inicializar SPI módulo antes de usar o SPI T6963C GLCD Biblioteca. Para MCUs com dois módulos SPI é possível inicializar ambos e, em seguida, switch usando o SPI_Set_Active () rotina.
Nota: Esta biblioteca é projetado para funcionar com GLCD Serial mikroElektronika de 240x128 e 240X64 Adaptador pinagem Quadros, ver esquema na parte inferior desta página para detalhes.
Nota: Algumas placas mikroElektronika do adaptador tem pinagem diferente do T6369C fichas. relações adequadas entre esses rótulos são dadas na tabela abaixo:
As dependências externas do SPI T6963C LCD Gráfico Biblioteca
A implementação do SPI T6963C Gráfica rotinas Lcd Biblioteca é baseado em Port Expander Biblioteca rotinas.
As dependências externas são as mesmas dependências do Porto Biblioteca Expander externa- CIES.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
507
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Rotinas da biblioteca
mikroC PRO para PIC
- - - - - - - - - - - - - - - - - - -
SPI_T6963C_Config SPI_T6963C_writeData SPI_T6963C_writeCommand SPI_T6963C_setPtr SPI_T6963C_waitReady SPI_T6963C_fill SPI_T6963C_dot SPI_T6963C_write_char SPI_T6963C_write_text SPI_T6963C_line SPI_T6963C_rectangle SPI_T6963C_box SPI_T6963C_circle SPI_T6963C_image SPI_T6963C_sprite SPI_T6963C_set_cursor SPI_T6963C_clearBit SPI_T6963C_setBit SPI_T6963C_negBit
Nota: A seguir as rotinas da biblioteca de baixo nível são implementadas como macros. Estes macros podem ser encontrados no SPI_T6963C.h cabeçalho do arquivo que está localizado na o SPI projetos T6963C pastas exemplo.
- - - - - - - - - - - -
SPI_T6963C_displayGrPanel SPI_T6963C_displayTxtPanel SPI_T6963C_setGrPanel SPI_T6963C_setTxtPanel SPI_T6963C_panelFill SPI_T6963C_grFill SPI_T6963C_txtFill SPI_T6963C_cursor_height SPI_T6963C_graphics SPI_T6963C_text SPI_T6963C_cursor SPI_T6963C_cursor_blink
508
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_Config (unsigned int largura, unsigned char altura, unsigned char fntW, char DeviceAddress, unsigned char wr, unsigned char º, unsigned char cd, unsigned char rst);
Retorna Nada.
Descrição
Initalizes o gráfico controlador do LCD.
Parâmetros:
- largura: largura do painel GLCD - altura: altura do painel GLCD - fntW: tamanho da fonte - DeviceAddress: SPI endereço de hardware de expansão, consulte o esquema na
final desta página - WR: sinal de escrita pino GLCD porta de controle - rd: leia pino GLCD sinal na porta de controle - CD: comando / pino de sinal de dados sobre GLCD porta de controle - RST: sinal de reset pino sobre GLCD porta de controle
Mostrar organização RAM: A biblioteca cortes RAM em painéis: um painel completo é um painel gráfico fol- seguidos por um painel de texto (ver esquema abaixo).
esquemática: +---------------------+ / \ PAINEL DE IMAGENS # + 0 + | + + | + + | + + | +---------------------+ | PAINEL 0 + Painel de texto # 0 + | + + \ / +---------------------+ / \ + PAINEL DE IMAGENS # 1 + | + + | + + | + + | +---------------------+ | PAINEL 1 + Painel de texto # 1 + | + + | +---------------------+ \ /
CAPÍTULO 7
mikroC PRO para PIC
Spi_T6963C_Config
Bibliotecas
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
509
www.mecatronicadegaragem.blogspot.com
Requer
As variáveis globais: - SPExpanderCS: Chip Selecionar linha - SPExpanderRST: linha de reset - SPExpanderCS_Direction: Direção do pino de Chip Select - SPExpanderRST_Direction: Direção do pino de Reset devem ser definidas antes de utilizar este função.
O módulo SPI precisa ser inicializado. Veja o SPI1_Init e SPI1_Init_Advanced rotinas.
Exemplo
/ / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander ... / / Inicializar módulo SPI SPI1_Init (); SPI_T6963C_Config (240, 64, 8, 0, 0, 1, 3, 4);
Protótipo vazio SPI_T6963C_writeData (unsigned char Ddata);
Retorna Nada.
Descrição Grava dados para o controlador T6963C via interface SPI.
Parâmetros: - Ddata: dados a serem gravados
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_writeData (AddrL);
Protótipo vazio SPI_T6963C_writeCommand (unsigned char Ddata);
Retorna Nada.
Descrição Grava T6963C comando para o controlador via interface SPI.
Parâmetros: - Ddata: comando a ser escrito
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_writeCommand (SPI_T6963C_CURSOR_POINTER_SET);
CAPÍTULO 7 Bibliotecas
Spi_T6963C_WriteData
Spi_T6963C_WriteCommand
mikroC PRO para PIC
510
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_fill (unsigned char v, unsigned int de início, unsigned int len);
Retorna Nada.
Descrição
Preenche bloco controlador de memória com o byte dado.
Parâmetros:
- v: byte a ser escrito - start: endereço inicial do bloco de memória - len: comprimento do bloco de memória em bytes
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_fill (0x33, 0x000F 0x00FF);
Protótipo vazio SPI_T6963C_setPtr (unsigned int p, unsigned char c);
Retorna Nada.
Descrição
Define o ponteiro p de memória para o comando c.
Parâmetros:
- p: endereço onde comando deve ser escrito - c: comando a ser escrito
Requer necessidades módulo SToshiba GLCD para ser inicializado. Veja SPI_T6963C_Config ti
Exemplo SPI_T6963C_setPtr (T6963C_grHomeAddr + start, T6963C_ADDRESS_POINTER_SET);
Protótipo vazio SPI_T6963C_waitReady (void);
Retorna Nada.
Descrição Piscinas do byte de status e loops até Toshiba GLCD módulo está pronto.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_waitReady ();
CAPÍTULO 7
mikroC PRO para PIC
Spi_T6963C_SetPtr
Spi_T6963C_WaitReady
Spi_T6963C_Fill
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
511
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_dot (int x, int y, unsigned char cor);
Retorna Nada.
Descrição
Desenha um ponto no gráfico do painel atual GLCD nas coordenadas (x, y).
Parâmetros:
- x: posição do ponto no eixo X - y: dot posição no eixo y - cor: parâmetro de cor. Valores válidos: Spi_T6963C_BLACK e
Spi_T6963C_WHITE
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_dot (x0, y0, pcolor);
CAPÍTULO 7 Bibliotecas
Spi_T6963C_Dot
mikroC PRO para PIC
512
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_write_char (unsigned char c, unsigned char x, unsigned char y, unsigned char modalidade);
Retorna Nada.
Descrição
Grava um caractere em o painel de texto actual do GLCD nas coordenadas (x, y).
Parâmetros:
- c: char a ser escrito - x: char posição no eixo X - y: char na posição do eixo-y - modo: parâmetro mode. Valores válidos:
SPI_T6963C_ROM_MODE_OR, SPI_T6963C_ROM_MODE_XOR, SPI_T6963C_ROM_MODE_AND e SPI_T6963C_ROM_MODE_TEXT
Modo de explicação do parâmetro:
- OU Mode: No OR-Mode, texto e gráficos podem ser exibidos e os dados é logicamente "OU-ed". Esta é a forma mais comum de combinar texto e gráficos para rótulos exemplo nos botões.
- XOR-Mode: Neste modo, os dados de texto e gráficos são combinados através da
lógica "OU exclusivo". Isso pode ser útil para exibir texto no modo negativo, ou seja, texto branco em fundo preto.
- E-Mode: O texto e dados gráficos mostrados no visor são combinados através de
a lógica "Função E". - TEXT-Mode: Esta opção só está disponível ao exibir apenas um texto. A
Texto valores dos atributos são armazenados na área gráfica de memória de vídeo.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_write_char ("A", 22,23, E);
CAPÍTULO 7
mikroC PRO para PIC
Spi_T6963C_Write_Char
Bibliotecas
Mikroelektronika - Software e Soluções de hardware para Embedded World
513
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_write_text (unsigned char * Str, unsigned char x, unsigned char y, unsigned char modalidade);
Retorna Nada.
Descrição
Grava o texto no painel de texto actual do GLCD nas coordenadas (x, y).
Parâmetros:
- str: texto a ser escrito - x: posição do texto no eixo-x - y: texto posição no eixo y - modo: parâmetro mode. Valores válidos:
SPI_T6963C_ROM_MODE_OR, SPI_T6963C_ROM_MODE_XOR, SPI_T6963C_ROM_MODE_AND e SPI_T6963C_ROM_MODE_TEXT
Modo de explicação do parâmetro:
- OU Mode: No OR-Mode, texto e gráficos podem ser exibidos e os dados é logicamente "OU-ed". Esta é a forma mais comum de combinar texto e gráficos para rótulos exemplo nos botões.
- XOR-Mode: Neste modo, os dados de texto e gráficos são combinados através da
lógica "OU exclusivo". Isso pode ser útil para exibir texto no modo negativo, ou seja, texto branco em fundo preto.
- E-Mode: O texto e dados gráficos mostrados no visor são combinados através da lógica "Função E".
- TEXT-Mode: Esta opção só está disponível ao exibir apenas um texto. A Texto valores dos atributos são armazenados na área gráfica de memória de vídeo.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_write_text ("DEMO BIBLIOTECA GLCD, BEM-VINDO!", 0, 0; T6963C_ROM_MODE_EXOR);
CAPÍTULO 7 Bibliotecas
Spi_T6963C_write_Text
mikroC PRO para PIC
514
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_rectangle (int x0, int y0, int x1, int y1, unsigned char pcolor);
Retorna Nada.
Descrição
Desenha um retângulo na GLCD.
Parâmetros:
- x0: coordenada x do canto superior esquerdo do retângulo - y0: coordenada y do canto superior esquerdo do retângulo - x1: coordenada x do canto inferior direito do retângulo - y1: coordenada y do canto inferior direito do retângulo - pcolor: parâmetro de cor. Valores válidos:
SPI_T6963C_BLACK e SPI_T6963C_WHITE
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_rectangle (20, 20, 219, 107, T6963C_WHITE);
Protótipo vazio SPI_T6963C_line (int x0, int y0, int x1, int y1, não assinado char pcolor);
Retorna Nada.
Descrição
Desenha uma linha de (x0, y0) a (x1, y1).
Parâmetros:
- x0: coordenada x do início da linha - y0: coordenada y da linha final - x1: coordenada x do início da linha - y1: coordenada y o fim da linha - pcolor: parâmetro de cor. Valores válidos: SPI_T6963C_BLACK e SPI_T6963C_WHITE
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_line (0, 0, 239, 127, T6963C_WHITE);
CAPÍTULO 7
mikroC PRO para PIC
Spi_T6963C_line
Spi_T6963C_rectangle
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
515
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_box (int x0, int y0, int x1, int y1, unsigned char pcolor);
Retorna Nada.
Descrição
Desenha uma caixa na GLCD
Parâmetros:
- x0: coordenada x superior canto esquerdo caixa - y0: coordenada y do canto superior esquerdo caixa - x1: coordenada x do canto inferior direito caixa - y1: coordenada y do canto inferior direito caixa - pcolor: parâmetro de cor. Valores válidos:
SPI_T6963C_BLACK e SPI_T6963C_WHITE Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_box (0, 119, 239, 127, T6963C_WHITE);
Protótipo vazio SPI_T6963C_circle (int x, int y, tempo r, unsigned char PCOL- ou);
Retorna Nada.
Descrição
Desenha uma círculo no GLCD.
Parâmetros:
- x: coordenada x do centro do círculo - y: coordenada y do centro do círculo - r: tamanho do raio - pcolor: parâmetro de cor. Valores válidos:
SPI_T6963C_BLACK e SPI_T6963C_WHITE
Requer Toshiba módulo GLCD precisa ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_circle (120, 64, 110, T6963C_WHITE);
CAPÍTULO 7 Bibliotecas
Spi_T6963C_box
Spi_T6963C_circle
mikroC PRO para PIC
516
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_sprite (unsigned char px, unsigned char py, const código char * Pic, unsigned char sx, unsigned char sy);
Retorna Nada.
Descrição
Preenche a área do retângulo gráfico (px, py) para (px + sx, sy + py) com imagem de tamanho personalizado.
Parâmetros:
- px: coordenada x do canto superior esquerdo de imagem. Valores válidos: múltiplos de o tamanho da fonte
- py: coordenada y do canto superior esquerdo de imagem - pic: imagem a ser exibida - sx: Imagem de largura. Valores válidos: múltiplos da largura da fonte - sy: altura da imagem
Nota: Se px e sx parâmetros não são múltiplos da largura da fonte serão l d ó i ú i b i é úl i l d l d
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_sprite (76, 4, Einstein, 88, 119); / / desenha um sprite
Protótipo vazio SPI_T6963C_image (código const char * PIC);
Retorna Nada.
Descrição
Exibe bitmap em GLCD.
Parâmetros:
- pic: imagem a ser exibida. matriz de bitmap podem ser localizados em ambos os
códigos e Memória RAM (devido à mikroC PRO para PIC ponteiro para const e ponteiro para RAM de equivalência).
Use o mikroC PRO opção integrada GLCD Bitmap Editor ( Ferramentas > GLCD Bitmap Editor) para converter a imagem para uma matriz constante
i d ibi ã
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_image (my_image);
CAPÍTULO 7
mikroC PRO para PIC
Spi_T6963C_image
Spi_T6963C_Sprite
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
517
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_set_cursor (unsigned char x, unsigned char y);
Retorna Nada.
Descrição
Define o cursor para a linha xe coluna y.
Parâmetros:
- x: cursor número da linha a posição - y: número da coluna a posição do cursor
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_set_cursor (cposy cposx);
Protótipo vazio SPI_T6963C_setBit (char b);
Retorna Nada.
Descrição
Define bit porta de controle (s).
Parâmetros:
- b: bit da máscara. A função bit x na porta de controle se o bit x em máscara de bits é
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Conjunto de bits 0 e 1 no controle do porto SPI_T6963C_setBit (0x03);
Protótipo vazio SPI_T6963C_clearBit (char b);
Retorna Nada.
Descrição
Limpa porta de controle bit (s).
Parâmetros:
- b: bit da máscara. A função irá limpar bit x na porta de controle se o bit x na máscara de bits é
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Limpar os bits 0 e 1 na porta de controle SPI_T6963C_clearBit (0x03);
CAPÍTULO 7 Bibliotecas
Spi_T6963C_set_cursor
Spi_T6963C_clearBit
Spi_T6963C_setBit
mikroC PRO para PIC
518
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_negBit (char b);
Retorna Nada.
Descrição
Nega bit porta de controle (s).
Parâmetros:
- b: bit da máscara. A função irá negar bit x na porta de controle se o bit x em máscara de
bits é
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Nega bits 0 e 1 no controle do porto SPI_T6963C_negBit (0x03);
Protótipo vazio SPI_T6963C_displayTxtPanel (char n);
Retorna Nada.
Descrição
Mostrar painel de texto selecionado.
Parâmetros:
- n: número do painel. Valores válidos: 0 e 1.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Texto do visor do painel de um SPI_T6963C_displayTxtPanel (1);
Protótipo vazio SPI_T6963C_displayGrPanel (char n);
Retorna Nada.
Descrição
Mostrar selecionados painel gráfico.
Parâmetros:
- n: Número painel gráfico. Valores válidos: 0 e 1.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / Display gráfico / 1 SPI_T6963C_displayGrPanel (1);
CAPÍTULO 7
mikroC PRO para PIC
Spi_T6963C_negBit
Spi_T6963C_DisplayGrPanel
Spi_T6963C_displayTxtPanel
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
519
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_setGrPanel (char n);
Retorna Nada.
Descrição
Calcular o endereço inicial para o painel gráfico selecionado e defina internos adequados ponteiros. Todas as operações subseqüentes gráfico será pré-formados neste gráfico painel.
Parâmetros:
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Configura como um painel gráfico painel gráfico atual. SPI_T6963C_setGrPanel (1);
Protótipo vazio SPI_T6963C_setTxtPanel (char n);
Retorna Nada.
Descrição
Calcular o endereço inicial para o painel de texto selecionado e definir o ponto interno apro- ers. Todas as operações de texto subseqüentes serão pré-formados neste painel de texto.
Parâmetros:
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Painel de texto definido como um painel de texto atual. SPI_T6963C_setTxtPanel (1);
CAPÍTULO 7 Bibliotecas
Spi_T6963C_setGrPanel
Spi_T6963C_setTxtPanel
mikroC PRO para PIC
520
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_grFill (unsigned char v);
Retorna Nada.
Descrição
Preencha atual painel gráfico com o valor apropriado (0 a clara).
Parâmetros:
- v: valor para preencher com painel gráfico.
Requer Toshiba necessidades módulo GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Painel atual clara gráfico SPI_T6963C_grFill (0);
Protótipo vazio SPI_T6963C_panelFill (unsigned char v);
Retorna Nada.
Descrição
Preencha painel atual na íntegra (Texto + gráfico) com o valor apropriado (0 a clara).
Parâmetros:
valor para preencher com painel Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo painel atual clara SPI_T6963C_panelFill (0);
Protótipo vazio SPI_T6963C_txtFill (unsigned char v);
Retorna Nada.
Descrição
Preencha painel texto atual com o valor apropriado (0 a clara).
Parâmetros:
- v: este valor aumentou 32 será utilizado para preenchimento do painel de texto.
Requer Toshiba módulo GLCD precisa ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Painel de texto claro atuais SPI_T6963C_txtFill (0);
CAPÍTULO 7
mikroC PRO para PIC
Spi_T6963C_panelFill
Spi_T6963C_GrFill
Spi_T6963C_txtFill
Bibliotecas
Mikroelektronika - Softwares e soluções de hardware para Embedded World
521
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_text (char n);
Retorna Nada.
Descrição
Activar / desactivar a visualização de texto.
Parâmetros:
- n: texto ativar / desativar o parâmetro. Valores válidos: 0 (Dispaying texto desativar) e 1 (Habilitar exibindo texto).
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Ativar texto exibindo SPI_T6963C_text (1);
Protótipo vazio SPI_T6963C_graphics (char n);
Retorna Nada.
Descrição
Ativar / desativar gráfico exibindo.
Parâmetros:
- n: gráfico ativar / desativar o parâmetro. Valores válidos: 0 (Desativar gráfico dispaying) e 1 (Habilitar gráfico exibindo).
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Ativar gráfico exibindo SPI_T6963C_graphics (1);
Protótipo vazio SPI_T6963C_cursor_height (unsigned char n);
Retorna Nada.
Descrição
Defina o tamanho do cursor.
Parâmetros:
- n: cursor altura. Valores válidos: 0 .. 7.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo SPI_T6963C_cursor_height (7);
CAPÍTULO 7 Bibliotecas
Spi_T6963C_cursor_height
Spi_T6963C_graphics
Spi_T6963C_text
mikroC PRO para PIC
522
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio SPI_T6963C_cursor_blink (char n);
Retorna Nada.
Descrição
Ativar / desativar o cursor piscando.
Parâmetros:
- n: cursor piscando ativar / desativar o parâmetro. Valores válidos: 0 (Cursor
desativar Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / / Ativar o cursor piscando SPI_T6963C_cursor_blink (1);
Protótipo vazio SPI_T6963C_cursor (char n);
Retorna Nada.
Descrição
Definir cursor on / off.
Parâmetros:
- n: on / off parâmetro. Valores válidos: 0 (cursor partiu) e 1 (cursor ativado).
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja SPI_T6963C_Config rotina.
Exemplo / Cursor / set em SPI_T6963C_cursor (1);
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Spi_T6963C_cursor
Spi_T6963C_cursor_blink
Exemplo Biblioteca
A demo seguinte desenho testes avançados rotinas da biblioteca SPI GLCD T6963C. Hardware configurações neste exemplo são feitas para a 240x128 T6963C display, placa EasyPIC5 e 16F887.
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
523
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
# Include
"__SPIT6963C.h"
mikroC PRO para PIC
/ * * imagens bitmap armazenado em ROM * /
extern código const char me []; extern const char código Einstein] [;
/ / Porta conexões Expander módulo sbit SPExpanderRST em RC0_bit; sbit SPExpanderCS em RC1_bit; sbit SPExpanderRST_Direction em TRISC0_bit; sbit SPExpanderCS_Direction em TRISC1_bit; / / Fim Porto módulo conexões Expander
vazio main () {
char txt1 [] = " Einstein teria gostado de mim "; char txt [] = "DEMO BIBLIOTECA GLCD, BEM-VINDO!";
não assinado não assinado não assinado não assinado
char int char int
painel; i; vira-latas; cposx, cposy;
/ / / / / / / /
painel atual de propósito geral Registre-se visibilidade do cursor cursor x-y posição
TRISA = 0xFF; ANSEL = 0;
/ / Configurar o PORTA como entrada / / Configurar um pinos como I / O digital
ANSELH = 0;
/ / Se Porto Expander Library usa SPI1 módulo SPI1_Init (); / / Inicializar SPI módulo usado com PortExpander
/ / / /
/ / Se a porta Expander Biblioteca utiliza o módulo SPI2 SPI2_Init (); / / Inicializa o módulo SPI usado com PortExpander
/ * * Exposição init para 240 pixels de largura e 128 pixels de altura * 8 bits de largura de caractere * Barramento de dados sobre MCP23S17 PORTB * Barramento de controle na porta MCP23S17 * 2 é pouco! WR * 1 é pouco! RD * Bit 0 é! CD * 4 bits é RST * Chip permitirá, no reverso, fonte 8x8 internamente definida na biblioteca * /
SPI_T6963C_Config (240, 128, 8, 0, 2, 1, 0, 4); Delay_ms (1000);
524
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
/ * * Possibilitar gráficos e exibir texto, ao mesmo tempo * /
SPI_T6963C_graphics (1); SPI_T6963C_text (1);
painel = 0; i = 0; curs = 0; cposy cposx = 0;
/ * As mensagens de texto * * /
SPI_T6963C_write_text (txt, 0, 0 SPI_T6963C_ROM_MODE_XOR); SPI_T6963C_write_text (txt1, 0, 15, SPI_T6963C_ROM_MODE_XOR);
/ * * Cursor * /
Bibliotecas
SPI_T6963C_cursor_height (8); SPI_T6963C_set_cursor (0, 0); SPI_T6963C_cursor (0);
/ / 8 pixels de altura / Mover o cursor / para o canto superior esquerdo / / Cursor fora
/ * * Desenhar retângulos * /
SPI_T6963C_rectangle (0, 0, 239, 127, SPI_T6963C_WHITE); SPI_T6963C_rectangle (20, 20, 219, 107, SPI_T6963C_WHITE); SPI_T6963C_rectangle (40, 40, 199, 87, SPI_T6963C_WHITE); SPI_T6963C_rectangle (60, 60, 179, 67, SPI_T6963C_WHITE);
/ * * Desenhar uma cruz * /
SPI_T6963C_line (0, 0, 239, 127, SPI_T6963C_WHITE); SPI_T6963C_line (0, 127, 239, 0, SPI_T6963C_WHITE);
/ * * Desenhar caixas sólidas * /
SPI_T6963C_box (0, 0, 239, 8, SPI_T6963C_WHITE); SPI_T6963C_box (0, 119, 239, 127, SPI_T6963C_WHITE);
/ * * Desenhar círculos * /
SPI_T6963C_circle (120, 64, 10, SPI_T6963C_WHITE); SPI_T6963C_circle (120, 64, 30, SPI_T6963C_WHITE); SPI_T6963C_circle (120, 64, 50, SPI_T6963C_WHITE);
Mikroelektronika - Soluções de software e hardware para o mundo embutido 525
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
SPI_T6963C_circle (120, SPI_T6963C_circle (120, SPI_T6963C_circle (120, SPI_T6963C_circle (120,
64, 64, 64, 64,
SPI_T6963C_WHITE 70); SPI_T6963C_WHITE 90); SPI_T6963C_WHITE 110); SPI_T6963C_WHITE 130);
SPI_T6963C_sprite (76, 4, Einstein, 88, 119); / / desenha um sprite SPI_T6963C_setGrPanel (1); / / Select painel gráfico outras SPI_T6963C_image (me); / / Preenche a tela com uma imagem gráfica
while (1) {
/ / Loop infinito
/ *
* Se PORTA_0 é pressionado, alternar a exibição gráfica painel 0 e gráfico 1
* / if (RA0_bit) {
painel + +; painel e = 1; SPI_T6963C_displayGrPanel (painel); Delay_ms (300); }
/ * * Se PORTA_1 é pressionada, exibir apenas o painel gráfico * /
else if (RA1_bit) { SPI_T6963C_graphics (1); SPI_T6963C_text (0); Delay_ms (300); }
/ * * Se PORTA_2 é pressionado, visor do painel de apenas texto * /
else if (RA2_bit) { SPI_T6963C_graphics (0); SPI_T6963C_text (1); Delay_ms (300); }
/ * * Se PORTA_3 é pressionado, o texto de exibição e painéis gráficos * /
else if (RA3_bit) { SPI_T6963C_graphics (1); SPI_T6963C_text (1); Delay_ms (300); }
/ *
526 Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
* Se PORTA_4 é pressionado, o cursor mudar * /
else if (RA4_bit) { Curs + +; if (curs == 3) curs = 0; switch (vira-latas) {
caso 0: / / Cursor não SPI_T6963C_cursor (0); break;
caso 1: / / Cursor piscando SPI_T6963C_cursor (1); SPI_T6963C_cursor_blink (1); break;
caso 2: / / Cursor intermitente não SPI_T6963C_cursor (1); SPI_T6963C_cursor_blink (0); break;
} Delay_ms (300); }
/ * * Move o cursor, mesmo que não visível * /
cposx + +; if (cposx SPI_T6963C_txtCols ==) {
cposx = 0; cposy + +; if (cposy == SPI_T6963C_grHeight SPI_T6963C_CHARACTER_HEIGHT /)
{ cposy = 0; }
} SPI_T6963C_set_cursor (cposy cposx);
Delay_ms (100); }
}
Mikroelektronika - Soluções de software e hardware para o mundo embutido
527
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Conexão HW
Spi T6963C GLCD conexão HW
mikroC PRO para PIC
528
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Adaptador Câ
datasheet T6369C RS C / D
R / W / RD
E / WR
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
T6963C biblioteca gráfica LCD
A mikroC PRO para PIC fornece uma biblioteca para trabalhar com base em Glcds TOSHIBA controlador T6963C. A Toshiba T6963C é muito popular controlador do LCD para uso em pequenos módulos gráficos. Ele é capaz de controlar exibe com um res- olution até 240x128. Devido à sua baixa potência e pequeno esboço é o mais apropriado para aplicações móveis, como PDAs, MP3 players ou celulares medição equipa- ment. Embora pequena, essa contoller tem uma capacidade de exibir e mesclando texto e gráficos, e que gere todos os sinais de interface para a linha exibe e Col- umn drivers.
Para criar um conjunto personalizado de imagens GLCD uso GLCD Bitmap Editor Tool.
Nota: ChipEnable (CE), FontSelect (FS) e Ré (MD) tem que ser definida para ade- níveis adequados pelo usuário fora do T6963C_init função. Veja o Biblioteca Exemplo de código na parte inferior desta página.
Nota: Algumas placas mikroElektronika do adaptador tem pinagem diferente do T6369C fichas. relações adequadas entre esses rótulos são dadas na tabela abaixo:
Mikroelektronika - Soluções de software e hardware para o mundo embutido
529
www.mecatronicadegaragem.blogspot.com
As seguintes variáveis devem ser definida em todos os projectos
LCD Gráfico com T6963C biblioteca:
Descrição: Exemplo:
sfr extern char T6963C_dataPort;
T6963C porta de
d d
char T6963C_dataPort na PORTD;
extern sbit sfr T6963C_ctrlwr;
Escrever sinal. sbit T6963C_ctrlwr na RC2_bit;
sbit sfr extern T6963C_ctrlrd;
Leia sinal. sbit T6963C_ctrlrd na RC1_bit;
sbit sfr extern T6963C_ctrlcd;
Comando / Dados sinal.
sbit T6963C_ctrlcd na RC0_bit;
sbit sfr extern T6963C_ctrlrst;
Reset sinal. sbit T6963C_ctrlrst em RC4_bit;
sbit sfr extern T6963C_ctrlwr_Direction;
Direção do Escrever pino.
sbit T6963C_ctrlwr_Direction em TRISC2_bit;
sbit sfr extern T6963C_ctrlrd_Direction;
Direção do Leia pino.
sbit T6963C_ctrlrd_Direction em TRISC1_bit;
sbit sfr extern T6963C_ctrlcd_Direction;
Direção do Dados dos pinos.
sbit T6963C_ctrlcd_Direction em TRISC0_bit;
sbit sfr extern T6963C_ctrlrst_Direction;
Direção do Reset.
sbit T6963C_ctrlrst_Direction em TRISC4_bit;
CAPÍTULO 7 Bibliotecas
As dependências externas da T6963C LCD Gráfico Biblioteca
mikroC PRO para PIC
530
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Rotinas da biblioteca
- T6963C_init - T6963C_writeData - T6963C_writeCommand - T6963C_setPtr - T6963C_waitReady - T6963C_fill - T6963C_dot - T6963C_write_char - T6963C_write_text - T6963C_line - T6963C_rectangle - T6963C_box - T6963C_circle - T6963C_image - T6963C_sprite - T6963C_set_cursor
Nota: A seguir as rotinas da biblioteca de baixo nível são implementadas como macros. Estes macros podem ser encontrados no T6963C.h arquivo de cabeçalho que está localizado na T6963C projetos pastas exemplo.
- T6963C_clearBit - T6963C_setBit - T6963C_negBit - T6963C_displayGrPanel - T6963C_displayTxtPanel - T6963C_setGrPanel - T6963C_setTxtPanel - T6963C_panelFill - T6963C_grFill - T6963C_txtFill - T6963C_cursor_height - T6963C_graphics - T6963C_text - T6963C_cursor - T6963C_cursor_blink
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
531
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
T6963C_Init
Protótipo
Retorna
Descrição
mikroC PRO para PIC vazio T6963C_init (unsigned int largura, unsigned char altura, unsigned char fntW);
Nada.
Initalizes o gráfico controlador do LCD. Parâmetros: - largura: largura do painel GLCD - altura: altura do painel GLCD - fntW: tamanho da fonte Mostrar organização RAM: A biblioteca corta a RAM em painéis: um painel completo é um painel gráfico seguido por um painel de texto (ver esquema abaixo). esquemática: +---------------------+ / \ PAINEL DE IMAGENS # + 0 + | + + | + + | + + | +---------------------+ | PAINEL 0 + Painel de texto # 0 + | + + \ / +---------------------+ / \ + PAINEL DE IMAGENS # 1 + | + + | + + | + + | +---------------------+ | PAINEL 1 + Painel de texto # 1 + | + + | +---------------------+ \ / As variáveis globais: - - - -
T6963C_dataPort: Data Port T6963C_ctrlwr: Escreve o sinal do pino T6963C_ctrlrd: Leia o sinal do pino T6963C_ctrlcd: Comando / pino de sinal de dados
Requer - - - - -
T6963C_ctrlrst: Redefinir o sinal do pino T6963C_ctrlwr_Direction: Direção de gravação do sinal do pino T6963C_ctrlrd_Direction: Direção de leitura do sinal do pino T6963C_ctrlcd_Direction: Direção do Comando de sinal de dados / pin T6963C_ctrlrst_Direction: Direção do sinal Reset
devem ser definidas antes de utilizar esta função.
532
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_writeData (unsigned char mydata);
Retorna Nada.
Descrição
Grava dados para o controlador T6963C.
Parâmetros:
- mydata: dados a ser escrito
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina
T6963C i it Exemplo T6963C_writeData (AddrL);
CAPÍTULO 7
mikroC PRO para PIC
/ / Conexões T6963C módulo char T6963C_dataPort em PORTD;
Bibliotecas
sbit T6963C_ctrlwr sbit T6963C_ctrlrd sbit T6963C_ctrlcd
em RC2_bit; em RC1_bit; em RC0_bit;
sbit T6963C_ctrlrst em RC4_bit; sbit T6963C_ctrlwr_Direction sbit T6963C_ctrlrd_Direction sbit T6963C_ctrlcd_Direction
em TRISC2_bit; em TRISC1_bit; em TRISC0_bit;
sbit T6963C_ctrlrst_Direction em TRISC4_bit; / / Fim do conexões T6963C módulo / / Não Sinais Utilizados pela biblioteca, eles são definidos em função principal sbit T6963C_ctrlce em RC3_bit; / / O sinal CE
Exemplo sbit T6963C_ctrlfs em RC6_bit / / sinal de FS sbit T6963C_ctrlmd em RC5_bit / / MD sinal sbit T6963C_ctrlce_Direction ção sbit T6963C_ctrlfs_Direction direção sbit T6963C_ctrlmd_Direction
em TRISC3_bit / / direção do sinal CE em TRISC6_bit / / sinal de FS em TRISC5_bit; / sinal / MD
direção / / Fim conexões T6963C módulo
... / Exposição / init para 240 pixels de largura, 128 pixels de altura e 8 bits largura de caractere T6963C_init (240, 128, 8);
T6963C_writeData
Mikroelektronika - Soluções de software e hardware para o mundo embutido
533
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_setPtr (unsigned int p, unsigned char c);
Retorna Nada.
Descrição
Define o ponteiro p de memória para o comando c.
Parâmetros:
- p: endereço onde o comando deve ser escrito - c: comando a ser escrito
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja o T6963C_init ti
Exemplo T6963C_setPtr (T6963C_grHomeAddr + start, T6963C_ADDRESS_POINTER_SET);
Protótipo vazio T6963C_writeCommand (unsigned char mydata);
Retorna Nada.
Descrição
Grava o comando para o controlador T6963C.
Parâmetros:
- mydata: comando a ser escrita
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_writeCommand (T6963C_CURSOR_POINTER_SET);
Protótipo vazio T6963C_waitReady (void);
Retorna Nada.
Descrição Piscinas do byte de status e loops até Toshiba GLCD módulo está pronto.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_waitReady ();
CAPÍTULO 7 Bibliotecas
T6963C_WriteCommand
T6963C_SetPtr
T6963C_waitReady
mikroC PRO para PIC
534
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_fill (unsigned char v, unsigned int de início, não assinado int len);
Retorna Nada.
Descrição
Preenche bloco controlador de memória com o byte dado.
Parâmetros:
- v: byte a ser escrito - start: endereço inicial do bloco de memória - len: comprimento do bloco de memória bytes
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_fill (0x33, 0x000F 0x00FF);
Protótipo vazio T6963C_dot (int x, int y, unsigned char cor);
Retorna Nada.
Descrição
Desenha um ponto no painel gráfico atual do GLCD nas coordenadas (x, y).
Parâmetros:
- x: posição do ponto no eixo X - y: dot posição no eixo y - cor: parâmetro de cor. Valores válidos: T6963C_BLACK e T6963C_WHITE
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja o T6963C_init ti Exemplo T6963C_dot (x0, y0, pcolor);
CAPÍTULO 7
mikroC PRO para PIC
T6963C_fill
T6963C_Dot
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
535
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_write_char (unsigned char c, unsigned char x, não assinado char y, unsigned char modalidade);
Retorna Nada.
Descrição
Grava um char no painel de texto actual do GLCD nas coordenadas (x, y).
Parâmetros:
- c: char a ser escrito - x: char posição no eixo X - y: char na posição do eixo-y - modo: parâmetro mode. Valores válidos: T6963C_ROM_MODE_OR, T6963C_ROM_MODE_XOR, T6963C_ROM_MODE_AND e T6963C_ROM_MODE_TEXT
Modo de explicação do parâmetro:
- OU Mode: No OR-Mode, texto e gráficos podem ser exibidos e os dados é logicamente "OU-ed". Esta é a forma mais comum de combinar texto e gráficos para rótulos exemplo nos botões.
- XOR-Mode: Neste modo, os dados de texto e gráficos são combinados através da
lógica "OU exclusivo". Isso pode ser útil para exibir texto em negativo modo, ou seja, texto branco em fundo preto. - E-Mode: O texto e gráfico- dados ic mostrados na exposição são combinados através da lógica "Função E".
- Em modo texto: O texto e dados gráficos mostrados na exposição são combinados através de
a lógica "Função E". - TEXT-Mode: Esta opção só está disponível ao exibir apenas um texto. A
Texto Atributo valores são armazenados na área gráfica de memória de vídeo
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina
T6963C i it Exemplo T6963C_write_char ('A', 22,23, E);
CAPÍTULO 7 Bibliotecas
T6963C_write_Char
mikroC PRO para PIC
536
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_write_text (unsigned char * Str, unsigned char x, unsigned char y, unsigned char modalidade);
Retorna Nada.
Descrição
Grava o texto no painel de texto atual de GLCD nas coordenadas (x, y).
Parâmetros:
- str: texto a ser escrito - x: posição do texto no eixo-x - y: posição do texto no eixo-y - modo: parâmetro mode. Valores válidos: T6963C_ROM_MODE_OR, T6963C_ROM_MODE_XOR, T6963C_ROM_MODE_AND e T6963C_ROM_MODE_TEXT
Modo explicação do parâmetro:
- OU Mode: No OR-Mode, texto e gráficos podem ser exibidos e os dados é logicamente "OU-ed". Esta é a forma mais comum de combinar texto e gráficos para rótulos exemplo nos botões.
- XOR-Mode: Neste modo, os dados de texto e gráficos são combinados através da
lógica "OU exclusivo". Isso pode ser útil para exibir texto em negativo modo, ou seja, texto branco em fundo preto.
- E-Mode: O texto e dados gráficos mostrados na exposição são combinados através de
a lógica "Função E". - TEXT-Mode: Esta opção só está disponível ao exibir apenas um texto. A
Texto valores dos atributos são armazenados na área gráfica de memória de vídeo
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja o T6963C_init
ti Exemplo T6963C_write_text ("DEMO BIBLIOTECA GLCD, BEM-VINDO!", 0, 0;
T6963C_ROM_MODE_XOR);
CAPÍTULO 7
mikroC PRO para PIC
T6963C_write_text
Bibliotecas
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
537
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_rectangle (int x0, int y0, int x1, int y1, unsigned char pcolor);
Retorna Nada.
Descrição
Desenha um retângulo na GLCD.
Parâmetros:
- x0: coordenada x do canto superior esquerdo do retângulo - y0: coordenada y do canto superior esquerdo do retângulo - x1: coordenada x do canto inferior direito do retângulo - y1: coordenada y no canto inferior direito do retângulo - pcolor: parâmetro de cor. Valores válidos: T6963C_BLACK e T6963C_WHITE
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina
T6963C i it Exemplo T6963C_rectangle, 20, 219, 107, T6963C_WHITE);
Protótipo vazio T6963C_line (int x0, int y0, int x1, int y1, unsigned char pcolor);
Retorna Nada.
Descrição
Desenha uma linha de (x0, y0) a (x1, y1).
Parâmetros:
- x0: coordenada x do início da linha - y0: coordenada y da linha final - x1: coordenada x do início da linha - y1: coordenada y da linha final - pcolor: parâmetro de cor. Valores válidos:
T6963C_BLACK e T6963C_WHITE
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_line (0, 0, 239, 127, T6963C_WHITE);
CAPÍTULO 7 Bibliotecas
T6963C_line
T6963C_rectangle
mikroC PRO para PIC
538
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_box (int x0, int y0, int x1, int y1, unsigned char pcolor);
Retorna Nada.
Descrição
Desenha uma caixa de GLCD
Parâmetros:
- x0: coordenada x no canto superior esquerdo caixa - y0: coordenada y do canto superior esquerdo caixa - x1: coordenada x do canto inferior direito caixa - y1: coordenada y do canto inferior direito caixa - pcolor: parâmetro de cor. Valores válidos: T6963C_BLACK e T6963C_WHITE
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_box (0, 119, 239, 127, T6963C_WHITE);
Protótipo vazio T6963C_circle (int x, int y, tempo r, unsigned char pcolor);
Retorna Nada.
Descrição
Desenha um círculo em GLCD.
Parâmetros:
- x: coordenada x do centro do círculo - y: coordenada y do centro do círculo - r: tamanho do raio - pcolor: parâmetro de cor. Valores válidos: T6963C_BLACK e T6963C_WHITE
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja o T6963C_init ti Exemplo T6963C_circle (120, 64, 110, T6963C_WHITE);
CAPÍTULO 7
mikroC PRO para PIC
T6963C_box
T6963C_circle
Bibliotecas
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
539
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_sprite (unsigned char px, unsigned char py, código de const char * Pic, unsigned char sx, unsigned char sy);
Retorna Nada.
Descrição
Preenche a área do retângulo gráfico (px, py) para (px + sx, sy + py) com imagem de tamanho personalizado.
Parâmetros:
- px: coordenada x do canto superior esquerdo de imagem. Valores válidos: múltiplos do fonte largura
- py: coordenada y do canto superior esquerdo de imagem - pic: imagem a ser exibida - sx: Imagem de largura. Valores válidos: múltiplos da largura da fonte - sy: altura da imagem
Nota: Se px e sx parâmetros não são múltiplos da largura da fonte serão l d ó i ú i b i é últi l d l d
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_sprite (76, 4, Einstein, 88, 119); / / desenha um sprite
Protótipo vazio T6963C_image (código const char * PIC);
Retorna Nada.
Descrição
Exibe bitmap em GLCD.
Parâmetros:
- pic: imagem a ser exibida. matriz de bitmap podem ser localizados em ambos os
códigos e Memória RAM (devido à mikroC PRO PIC para ponteiro para ponteiro para const e RAM de equivalência).
Use o mikroC PRO opção integrada GLCD Bitmap Editor ( Ferramentas > GLCD Bitmap Editor) para converter a imagem para uma matriz constante apropriada para exibição
Requer Toshiba necessidades módulo GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_image (mc);
CAPÍTULO 7 Bibliotecas
T6963C_image
T6963C_sprite
mikroC PRO para PIC
540
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_setBit (char b);
Retorna Nada.
Descrição
Define o controle bit da porta (s).
Parâmetros:
- b: bit da máscara. A função bit x na porta de controle se o bit x na máscara de bits é definida
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Conjunto de bits 0 e 1 no controle do porto T6963C_setBit (0x03);
Protótipo vazio T6963C_set_cursor (unsigned char x, unsigned char y);
Retorna Nada.
Descrição
Define o cursor para a linha xe coluna y.
Parâmetros:
- x: cursor número da linha a posição - y: número da coluna a posição do cursor
Requer Toshiba necessidades módulo GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_set_cursor (cposy cposx);
Protótipo vazio T6963C_clearBit (char b);
Retorna Nada.
Descrição
Limpa bits de controle de porta (s).
Parâmetros:
- b: bit da máscara. A função vai limpar bit x na porta de controle se o bit x na máscara de bits é
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Limpar os bits 0 e 1 na porta de controle T6963C_clearBit (0x03);
CAPÍTULO 7
mikroC PRO para PIC
T6963C_set_cursor
T6963C_clearBit
T6963C_setBit
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
541
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_negBit (char b);
Retorna Nada.
Descrição
Nega bit porta de controle (s).
Parâmetros:
- b: bit da máscara. A função irá negar bit x na porta de controle se bit x na máscara de bits
é
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Nega bits 0 e 1 no controle do porto T6963C_negBit (0x03);
Protótipo vazio T6963C_displayGrPanel (char n);
Retorna Nada.
Descrição
Mostrar selecionados painel gráfico.
Parâmetros:
- n: Número painel gráfico. Valores válidos: 0 e 1.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / Display gráfico / 1 T6963C_displayGrPanel (1);
Protótipo vazio T6963C_displayTxtPanel (char n);
Retorna Nada.
Descrição
Mostrar painel de texto selecionado.
Parâmetros:
- n: número do painel. Valores válidos: 0 e 1.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo / / Texto do visor do painel de um T6963C_displayTxtPanel (1);
CAPÍTULO 7 Bibliotecas
T6963C_negBit
T6963C_displayGrPanel
T6963C_displayTxtPanel
mikroC PRO para PIC
542
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_setTxtPanel (n char);
Retorna Nada.
Descrição
Calcular o endereço inicial para o painel de texto selecionado e definir o ponto interno apro- ers. Todas as operações subsequentes do texto será pré-formados neste painel de texto.
Parâmetros:
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C I it
Exemplo / / Painel de texto definido como um painel de texto atual. T6963C_setTxtPanel (1);
Protótipo vazio T6963C_setTxtPanel (char n);
Retorna Nada.
Descrição
Calcular o endereço inicial para o painel gráfico selecionado e conjunto apropriado ponteiros internos. Todas as operações subseqüentes gráfico será pré-formados neste painel gráfico.
Parâmetros:
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Painel de texto definido como um painel de texto atual. T6963C_setTxtPanel (1);
CAPÍTULO 7
mikroC PRO para PIC
T6963C_setGrPanel
T6963C_SetTxtPanel
T6963C_PanelFill
Bibliotecas
Protótipo Retorna
vazio T6963C_panelFill (unsigned char v);
Nada.
Preencha painel atual na íntegra (texto + gráfico) com o valor apropriado (0 a clara).
Descrição Parâmetros:
- v: valor para preencher painel com. Requer
Exemplo
necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C_init. / / Painel transparente atual T6963C_panelFill (0);
Mikroelektronika - Software e Soluções de hardware para Embedded World
543
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_txtFill (unsigned char v);
Retorna Nada.
Descrição
Preencha painel texto atual com o valor apropriado (0 a clara).
Parâmetros:
- v: este valor aumentou 32 será utilizado para preenchimento do painel de texto.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Painel de texto claro atuais T6963C_txtFill (0);
Protótipo vazio T6963C_grFill (unsigned char v);
Retorna Nada.
Descrição
Preencha atual painel gráfico com valor apropriado (0 a clara).
Parâmetros:
- v: valor para preencher com painel gráfico.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Painel atual clara gráfico T6963C_grFill (0);
Protótipo vazio T6963C_cursor_height (unsigned char n);
Retorna Nada.
Descrição
Defina o tamanho do cursor.
Parâmetros:
- n: cursor altura. Valores válidos: 0 .. 7.
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it Exemplo T6963C_cursor_height (7);
CAPÍTULO 7 Bibliotecas
T6963C_grFill
T6963C_txtFill
T6963C_cursor_height
mikroC PRO para PIC
544
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_text (char n);
Retorna Nada.
Descrição
Activar / desactivar a visualização de texto.
Parâmetros:
- n: on / off parâmetro. Valores válidos: 0 (Texto desativar dispaying) e 1 (Habilitar texto visualizar).
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Ativar texto exibindo T6963C_text (1);
Protótipo vazio T6963C_graphics (char n);
Retorna Nada.
Descrição
Ativar / desativar gráfico exibindo.
Parâmetros:
- n: on / off parâmetro. Valores válidos: 0 (Dispaying gráfico desativar) e 1 (Habilitar exibição gráfica).
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Enable gráfico exibindo T6963C_graphics (1);
Protótipo vazio T6963C_cursor (char n);
Retorna Nada.
Descrição
Definir cursor on / off.
Parâmetros:
- n: on / off parâmetro. Valores válidos: 0 (Cursor compensação) e 1 (Conjunto
Requer Toshiba módulo GLCD precisa ser inicializado. Veja a rotina T6963C_init.
Exemplo / Cursor / set em T6963C_cursor (1);
CAPÍTULO 7
mikroC PRO para PIC
T6963C_Graphics
T6963C_text
T6963C_cursor
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
545
www.mecatronicadegaragem.blogspot.com
Protótipo vazio T6963C_cursor_blink (char n);
Retorna Nada.
Descrição
Ativar / desativar o cursor piscando.
Parâmetros:
- n: on / off parâmetro. Valores válidos: 0 (Cursor desativar a piscar) e 1 (Habilitar cursor piscando).
Requer necessidades módulo Toshiba GLCD para ser inicializado. Veja a rotina T6963C i it
Exemplo / / Ativar o cursor piscando T6963C_cursor_blink (1);
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
T6963C_Cursor_Blink
Exemplo Biblioteca
Os testes de demonstração a seguir rotinas avançadas de desenho da biblioteca GLCD T6963C. Hardware con- figurações neste exemplo são feitas para a 240x128 T6963C display, placa EasyPIC5 e 16F887.
# Include
"__T6963C.h"
/ / Conexões T6963C módulo T6963C_dataPort char na PORTD; / / Porta de dados
sbit sbit sbit
T6963C_ctrlwr T6963C_ctrlrd T6963C_ctrlcd
em RC2_bit; em RC1_bit; em RC0_bit;
/ / / / / /
WR sinal de escrita RD leitura do sinal CD de comando / sinal de dados
sbit T6963C_ctrlrst em RC4_bit; / / RST sinal de reset sbit sbit sbit
T6963C_ctrlwr_Direction T6963C_ctrlrd_Direction T6963C_ctrlcd_Direction
em em em
TRISC2_bit; TRISC1_bit; TRISC0_bit;
/ / / / / /
WR sinal de escrita RD leitura do sinal CD de comando / sinal de dados
sbit T6963C_ctrlrst_Direction em TRISC4_bit; / / RST sinal de reset
/ / Não Sinais Utilizados pela biblioteca, eles são definidos em função principal sbit T6963C_ctrlce em RC3_bit; / / O sinal CE sbit T6963C_ctrlfs em RC6_bit / / sinal de FS sbit T6963C_ctrlmd em RC5_bit; / sinal / MD sbit T6963C_ctrlce_Direction sbit T6963C_ctrlfs_Direction sbit T6963C_ctrlmd_Direction
em TRISC3_bit / / direção do sinal CE em TRISC6_bit / / direção do sinal FS em TRISC5_bit / / direção do sinal MD
/ / Fim conexões T6963C módulo
546
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
/ * * imagens bitmap armazenado em ROM * /
const char código mC []; const char código Einstein] [;
vazio main () {
char txt1 [] = "EINSTEIN teria gostado mim "; char txt [] = "DEMO BIBLIOTECA GLCD, BEM-VINDO!";
Bibliotecas
não assinado não assinado não assinado não assinado
char int char int
painel; i; vira-latas; cposx, cposy;
/ / Painel atual / / Registrador genérico / / Visibilidade do cursor / / A posição do cursor-x, y
TRISA0_bit TRISA1_bit TRISA2_bit TRISA3_bit TRISA4_bit
= = = = =
1; 1; 1; 1; 1;
/ / / / / / / / / /
Definir Definir Definir Definir Definir
RA0 RA1 RA2 RA3 RA4
como como como como como
Entrada Entrada Entrada Entrada Entrada
T6963C_ctrlce_Direction = 0; T6963C_ctrlce = 0; T6963C_ctrlfs_Direction = 0; T6963C_ctrlfs = 0; T6963C_ctrlmd_Direction = 0; T6963C_ctrlmd = 0;
ANSEL = 0;
/ / Ativar T6963C
/ / Fonte Selecione 8x8 / / Número da coluna na escolha / / Configurar um pinos como I / O digital
ANSELH = 0;
/ / Inicializar T6369C T6963C_init (240, 128, 8);
/ * * Possibilitar gráficos e exibir texto, ao mesmo tempo * /
T6963C_graphics (1); T6963C_text (1);
painel = 0; i = 0; curs = 0; cposy cposx = 0; / * As mensagens de texto * * /
T6963C_write_text (txt, 0, 0 T6963C_ROM_MODE_XOR); T6963C_write_text (txt1, 0, 15, T6963C_ROM_MODE_XOR);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
547
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
/ * * Cursor * /
mikroC PRO para PIC
T6963C_cursor_height (8); T6963C_set_cursor (0, 0); T6963C_cursor (0);
/ / 8 pixels de altura / / Move o cursor para cima à esquerda / Cursor / off
/ * * Desenhar retângulos * /
T6963C_rectangle (0, 0, 239, 127, T6963C_WHITE); T6963C_rectangle (20, 20, 219, 107, T6963C_WHITE); T6963C_rectangle (40, 40, 199, 87, T6963C_WHITE); T6963C_rectangle (60, 60, 179, 67, T6963C_WHITE);
/ * * Desenhar uma cruz * /
T6963C_line (0, 0, 239, 127, T6963C_WHITE); T6963C_line (0, 127, 239, 0, T6963C_WHITE);
/ * * Desenhar caixas sólidas * /
T6963C_box (0, 0, 239, 8, T6963C_WHITE); T6963C_box (0, 119, 239, 127, T6963C_WHITE);
/ * * Desenhar círculos * /
T6963C_circle (120, T6963C_circle (120, T6963C_circle (120, T6963C_circle (120, T6963C_circle (120, T6963C_circle (120, T6963C_circle (120,
64, 64, 64, 64, 64, 64, 64,
T6963C_WHITE 10); T6963C_WHITE 30); T6963C_WHITE 50); T6963C_WHITE 70); T6963C_WHITE 90); T6963C_WHITE 110); T6963C_WHITE 130);
T6963C_sprite (76, 4, Einstein, 88, 119);
/ / Desenha um sprite
T6963C_setGrPanel (1);
/ / Selecione outra painel gráfico
T6963C_image (MC);
for (;) {/ / faz um loop infinito
/ * * Se RA0 é pressionada, exibir apenas o painel gráfico * /
if (RA0_bit) { T6963C_graphics (1);
548 Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
T6963C_text (0); Delay_ms (300); }
/ * * Se RA1 é pressionado, alternar a exibição entre o painel gráfico
0 e um painel gráfico * /
else if (RA1_bit) { painel + +; painel e = 1; T6963C_displayGrPanel (painel); Delay_ms (300); }
/ * * Se RA2 é pressionado, visor do painel de apenas texto * /
else if (RA2_bit) { T6963C_graphics (0); T6963C_text (1); Delay_ms (300); }
/ * * Se RA3 é pressionado, o texto de exibição e painéis gráficos * /
else if (RA3_bit) { T6963C_graphics (1); T6963C_text (1); Delay_ms (300); }
/ * * Se RA4 é pressionado, o cursor mudar * /
else if (RA4_bit) { Curs + +; if (curs == 3) curs = 0; switch (vira-latas) {
caso 0: / / Cursor não T6963C_cursor (0); break;
caso 1: / / Cursor piscando T6963C_cursor (1); T6963C_cursor_blink (1); break;
caso 2:
Mikroelektronika - Soluções de software e hardware para o mundo embutido 549
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
}
mikroC PRO para PIC
/ / Cursor intermitente não T6963C_cursor (1); T6963C_cursor_blink (0); break;
} Delay_ms (300); }
/ * * Move o cursor, mesmo que não visível * /
cposx + +; if (cposx T6963C_txtCols ==) {
cposx = 0; cposy + +; if (cposy == T6963C_grHeight / T6963C_CHARACTER_HEIGHT) {
cposy = 0; }
} T6963C_set_cursor (cposy cposx);
Delay_ms (100); }
550
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
T6963C GLCD conexão HW
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
551
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
UART BIBLIOTECA UART módulo de hardware está disponível com uma série de microcontroladores PIC. mikroC PRO para PIC Biblioteca UART dá trabalho confortável com o (full duplex) assíncrona modo. Você pode facilmente comunicar com outros dispositivos via protocolo RS-232 (por exemplo com o PC, veja a figura no final do tópico - RS-232 HW). Você precisa um microcontrolador PIC com hardware UART integrado, por exemplo 16F887. Então, simplesmente use as funções listadas abaixo. Nota: PIC18 MCUs Alguns têm vários módulos UART. Alternando entre os módulos UART UART na biblioteca é feito pela função UART_Set_Active (UART módulo tem que ser previamente inicializada). Nota: Para usar a rotina da biblioteca UART desejado, basta alterar o número 1 no protótipo com o número adequado de módulo, ou seja, UART2_Init (2400); Rotinas da biblioteca
- - - - - - - -
UART1_Init UART1_Data_Ready UART1_Tx_Idle UART1_Read UART1_Read_Text UART1_Write UART1_Write_Text UART_Set_Active
552
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com
Protótipo vazio UART1_Init (unsigned long baud_rate);
Retorna Nada.
Descrição Inicializa o módulo desejado hardware UART com a taxa de transmissão. Consulte a dados do dispositivo folha para taxas de transmissão permitiu específicas FOSC. Se você especificar o taxa de transmissão sem suporte compilador relatará um erro
Requer
Você precisa PIC MCU com hardware UART.
UART1_Init precisa ser chamada antes de usar as outras funções da UART Biblioteca.
Parâmetros:
- baud_rate: solicitou taxa de transmissão
Consulte a folha de dados do dispositivo para taxas de transmissão permitiu
FOSC específicos.
Nota: O cálculo do valor da taxa de UART transmissão é realizada pelo compilador,
como
Exemplo Isto irá inicializar o módulo de hardware UART1 e estabelecer a comunicação em 2400 bps:
UART1_Init (2400);
CAPÍTULO 7
mikroC PRO para PIC
Uart_Init
Bibliotecas
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
553
www.mecatronicadegaragem.blogspot.com
Protótipo char UART1_Read ();
Retorna Retorna o byte recebido.
Descrição Função recebe um byte via UART. Use a função para UART1_Data_Ready testar se de dados está pronto primeiro.
Requer UART módulo HW deve ser inicializado e comunicação estabelecida antes usar essa função. Veja UART1_Init.
Exemplo / / Se os dados estiverem prontos, lê-lo: se (UART1_Data_Ready () == 1) { receber = UART1_Read (); }
Protótipo char UART1_Tx_Idle ();
Retorna - 1 se os dados estão prontos para a leitura - 0 se não houver dados no cadastro receber
Descrição Use a função para testar se o registrador de transmissão mudança está vazia ou ã
Requer UART módulo HW deve ser inicializado e comunicação estabelecidos antes usar essa função. Veja UART1_Init.
Exemplo / / Se os dados anteriores foi deslocado para fora, enviar os dados a seguir: se (UART1_Tx_Idle () == 1) {
UART1_Write (_data); }
Protótipo char UART1_Data_Ready ();
Retorna - 1 se os dados estão prontos para leitura - 0 se não houver dados no cadastro receber
Descrição Use a função para testar se os dados no buffer de recepção está preparado para a l it
Requer UART módulo HW deve ser inicializado e comunicação estabelecida antes usar essa função. Veja UART1_Init.
Exemplo / / Se os dados estiverem prontos, lê-lo: se (UART1_Data_Ready () == 1) { receber = UART1_Read (); }
CAPÍTULO 7 Bibliotecas
Uart_Data_Ready
UART1_Tx_Idle
UART1_Read
mikroC PRO para PIC
554
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio UART1_Read_Text (char * Saída, char * Delimitador, char As tentativas);
Retorna Nada.
Descrição
Lê caracteres recebidos via UART até a seqüência delimitador é detectado. A seqüência de leitura é armazenado no parâmetro saída; seqüência delimitador é armazenado no parâmetro delimitador.
Esta é uma chamada de bloqueio: a seqüência delimitador Espera-se, caso contrário
o proce- mento sai (se o delimitador não é encontrado). Parâmetro Tentativas define o número de caracteres recebidos em que Delimitador seqüência é esperado Se Tentativas é definido Requer UART módulo HW deve ser inicializado e comunicação estabelecida antes
usar essa função. Veja UART1_Init.
Exemplo
Leia o texto até a seqüência de "OK" é recebida, e enviar de volta o que é foram recebidos:
UART1_Init (4800) / / inicializar o módulo UART1 Delay_ms (100);
enquanto (1) { se (UART1_Data_Ready () == 1) {/ / se os dados são recebidos
UART1_Read_Text (saída ", delim", 10) / / lê o texto até "Delim 'é encontrado
UART1_Write_Text (output); / / envia o texto }
}
Protótipo vazio UART1_Write (char _data);
Retorna Nada.
Descrição A função transmite um byte através do módulo de UART.
Parâmetros: _data: dados a serem enviados
Requer UART módulo HW deve ser inicializado e comunicação estabelecida antes usar essa função. Veja UART1_Init.
Exemplo unsigned char _data = 0x1E; ... UART1_Write (_data);
CAPÍTULO 7
mikroC PRO para PIC
UART1_Read_Text
UART1_Write
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
555
www.mecatronicadegaragem.blogspot.com
Protótipo vazio UART_Set_Active (char (* Read_ptr) (), vazio (* Write_ptr) (unsigned char data_), char (Ready_ptr) (), char (* Tx_idle_ptr) ())
Retorna Nada.
Descrição
Define módulo UART ativos que serão usados pelas rotinas de biblioteca UART.
Parâmetros:
- read_ptr: manipulador UART1_Read - write_ptr: manipulador UART1_Write - ready_ptr: UART1_Data_Ready manipulador - tx_idle_ptr: manipulador UART1_Tx_Idle
Requer A rotina é disponível apenas para MCUs com dois módulos UART.
Usado módulo UART deve ser inicializado antes de utilizar esta rotina. Veja UART1_Init rotina
Exemplo / / Ativar módulo UART2 UART_Set_Active (& UART1_Read & UART1_Write & UART1_Data_Ready, & UART1_Tx_Idle);
Protótipo vazio UART1_Write_Text (char * UART_text);
Retorna Nada.
Descrição Envia texto (UART_text parâmetro) via UART. O texto deve ser zero encerrado.
Requer UART módulo HW deve ser inicializado e comunicação estabelecida antes usar essa função. Veja UART1_Init.
Exemplo
Leia o texto até a seqüência de "OK" é recebida, e enviar de volta o que foi recebido:
UART1_Init (4800); / / inicializa UART1 módulo Delay_ms (100);
enquanto (1) { se (UART1_Data_Ready () == 1) {/ / se os dados são recebidos
UART1_Read_Text (saída ", delim", 10) / / lê o texto até "Delim 'é encontrado
UART1_Write_Text (output); / / envia o texto }
}
CAPÍTULO 7 Bibliotecas
UART1_Write_Text
UART_Set_Active
mikroC PRO para PIC
556
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Exemplo Biblioteca
O exemplo demonstra uma simples troca de dados via UART. Quando PIC MCU recebe os dados, ele imediatamente envia-lo de volta. Se o PIC é ligado ao PC (ver o figura abaixo), você pode testar o exemplo da mikroC PRO para PIC terminal para Comunicação RS-232, opção de menu Ferramentas > Terminal.
char uart_rd;
vazio main () {
UART1_Init (9600);
bps Delay_ms (100);
lize
enquanto (1) { se (UART1_Data_Ready ()) {
uart_rd UART1_Read = (); UART1_Write (uart_rd);
} }
}
/ / Inicializa o módulo UART em 9600 / / Espera módulo UART para estabili- / / Loop infinito / / Se os dados são recebidos, / / Lê os dados recebidos, / / E enviar dados via UART
Mikroelektronika - Soluções de software e hardware para o mundo embutido
557
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
HW Conexão
RS-232 HW
mikroC PRO para PIC
558
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
USB HID BIBLIOTECA
Universal Serial Bus (USB) fornece um barramento serial padrão para conectar uma ampla variedade de dispositivos, incluindo computadores, telefones celulares, consoles de jogos, PDA's, etc
mikroC PRO para PIC inclui uma biblioteca para trabalhar com dispositivos de interface humana através Universal Serial Bus. Um dispositivo de interface humana ou HID é uma tipo de dispositivo de computador que interage diretamente com os e leva a entrada de seres humanos, tais como o teclado, mouse, mesa digitalizadora, e assim por diante.
O descritor de arquivos
Cada projeto baseado na biblioteca HID USB deve incluir um arquivo de origem descritor que contém identificação do fornecedor e nome, identificação do produto e nome, comprimento relatório, e outros informações relevantes. Para criar um arquivo descritor, o uso integrado USB HID termi- nal de mikroC PRO para PIC (Ferramentas> Terminal USB HID). O nome padrão para arquivo descritor é USBdsc.c, mas você pode renomeá-lo.
O código fornecido na "Exemplos" obras de pasta de 48MHz, e as bandeiras não podem ser alterados sem consultar a ficha apropriada em primeiro lugar.
Rotinas da biblioteca
- - - -
Hid_Enable Hid_Read Hid_Write Hid_Disable
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
559
www.mecatronicadegaragem.blogspot.com
Protótipo não assinado curto Hid_Write (unsigned writebuff, unsigned short len);
Retorna 1 se os dados foram enviados com sucesso, 0 se não.
Descrição
Função envia dados do buffer de escrita writebuff para hospedar. Escrever é o Buffer mesmo parâmetro utilizado na inicialização; Hid_Enable ver. Parâmetro len devem especificar o tamanho dos dados a serem transmitidos.
Chamada de função necessita de ser repetida, desde que os dados não são
Requer HID USB precisa ser ativada antes de usar esta função. Veja Hid_Enable.
Exemplo / / Repetir até o sucesso. while (Hid_Write (& my_Usb_Buff, 1)!);
Protótipo vazio Hid_Enable (unsigned readbuff, não assinado writebuff);
Retorna Nada.
Descrição
Permite a comunicação USB HID. Parâmetros readbuff e writebuff são O buffer de leitura e de gravação do buffer, respectivamente, os quais são utilizados para com HID- de comunicação.
Esta função precisa ser chamada antes de usar outras rotinas de USB HID Biblioteca Requer Nada. Exemplo Hid_Enable (& rd, wr &);
Protótipo unsigned char Hid_Read (void);
Retorna Número de caracteres no buffer de leitura recebidos do host.
Descrição Recebe a mensagem de acolhimento e armazena no buffer de leitura. função retorna ú d bid b ff d l i Requer HID USB precisa ser ativada antes de usar este função. Veja Hid_Enable.
Exemplo obter Hid_Read = ();
CAPÍTULO 7 Bibliotecas
Hid_Enable
Hid_Read
Hid_Write
mikroC PRO para PIC
560
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Hid_Disable (void);
Retorna Nada.
Descrição Desativa a comunicação USB HID.
Requer HID USB precisa ser ativada antes de usar esta função. Veja Hid_Enable.
Exemplo Hid_Disable ();
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Hid_Disable
Exemplo Biblioteca
O exemplo a seguir envia continuamente seqüência de números de 0 .. 255 para o PC via Universal Ser- ial de ônibus. usbdsc.c devem ser incluídas no projeto (via mikroC PRO para PIC ferramenta IDE ou via # Include mecanismo de código fonte).
unsigned short m, k; unsigned short userRD_buffer [64]; unsigned short userWR_buffer [64];
vazio interrupt () {
asm CALL _Hid_InterruptProc nop asm
}
void Init_Main () {
/ / Desativar todas as interrupções / / Disable GIE, PEIE, TMR0IE INT0IE, RBIE INTCON = 0; INTCON2 0xF5 =; INTCON3 = 0xC0; / / Desactivar Níveis de prioridade na interrupções RCON.IPEN = 0; PIE1 = 0; PIE2 = 0; TIP1 = 0; PIR2 = 0;
/ / Configura todas as portas com função analógica como digital ADCON1 | = 0x0F;
/ / Configuração de Portas TRISA = 0; TRISB = 0; TRISC = 0xFF; TRISD = 0xFF; TRISE = 0x07;
Mikroelektronika - Soluções de software e hardware para o mundo embutido 561
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
LATA LATB LATC LATD TARDE
= = = = =
0; 0; 0; 0; 0;
/ / RAM usuário Limpar / / Bancos [00 .. 07] (8 x 256 = 2048 bytes) asm {
LFSR FSR0, 0x000 MOVLW 0x08 CLRF POSTINC0, 0 CPFSEQ FSR0H, 0 BRA $ - 2
}
/ Timer / 0 T0CON = 0x07; TMR0H => (65536-156)> 8; TMR0L = (65536-156) e 0xFF; INTCON.T0IE = 1 / / Enable T0IE T0CON.TMR0ON = 1;
}
/ ** Rotina programa principal ** /
vazio main () {
Init_Main (); Hid_Enable (& userRD_buffer & userWR_buffer);
fazer {
para (K = 0; k <255; k + +) { / / Prepara buffer de envio userWR_buffer [0] = k;
/ / Envia a Número via USB Hid_Write (& userWR_buffer, 1);
} } enquanto (1);
Hid_Disable ();
}
562
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Conexão HW
Esquema de conexão USB
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
563
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Padrão ANSI C bibliotecas
mikroC PRO para PIC
- ANSI - ANSI - ANSI - ANSI
C C C C
Ctype Biblioteca Biblioteca de Matemática Stdlib Biblioteca String Biblioteca
Biblioteca Ctype ANSI C
A mikroC PRO para PIC fornece um conjunto de funções da biblioteca padrão ANSI C para o teste- ção e mapeamento de caracteres.
Nota: Nem todos os funções padrão foram incluídos.
Nota: As funções têm sido quase sempre executado de acordo com os padrões ANSI C- dard, mas algumas funções têm sido modificados de modo a facilitar programa PIC- ming. Certifique-se de percorrer a descrição antes usando funções C padrão.
Funções da biblioteca
- - - - - - - - - - - -
isalnum isalpha iscntrl isdigit isgraph islower ispunct isspace isupper isxdigit toupper tolower
564
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short isalpha (char personagem);
Descrição A função retorna 1 se o caráter é alfabética (A-Z, um-z), caso contrário, retorna zero.
Protótipo unsigned short isalpha (char personagem);
Descrição A função retorna 1 se o caráter é alfanumérico (A-Z, um-z, 0-9), caso contrário retorna zero.
Protótipo unsigned short iscntrl (char personagem);
Descrição A função retorna 1 se o caráter é um controle ou eliminar caracter (decimal 0 - 31 e 127), caso contrário retorna zero.
Protótipo unsigned short isgraph (char personagem);
Descrição A função retorna 1 se o caráter é uma impressão, excluindo o espaço (decimal 32), caso contrário retorna zero.
CAPÍTULO 7
mikroC PRO para PIC
isalnum
isalpha
iscntrl
isdigit
isgraph
islower
ispunct
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
565
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short ispunct (char personagem);
Descrição A função retorna 1 se o caráter é uma pontuação (decimal 32-47, 58-63, 91 - 96, 123-126), caso contrário retorna zero.
Protótipo int islower (char personagem);
Descrição A função retorna 1 se o caráter é uma letra minúscula (a-z), caso contrário, retorna zero.
Protótipo unsigned short isdigit (char personagem);
Descrição A função retorna 1 se o caráter é um dígito (0-9), caso contrário retorna zero.
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short isspace (char personagem);
Descrição A função retorna 1 se o caráter é um espaço em branco (espaço, tabulação, CR, HT, VT, NL, FF), caso contrário retorna zero.
Protótipo unsigned short isupper (char personagem);
Descrição A função retorna 1 se o caráter é uma letra maiúscula (A-Z), caso contrário retorna zero.
Protótipo unsigned short isxdigit (char personagem);
Descrição A função retorna 1 se o caráter é um dígito hexadecimal (0-9, A-F, a-f), caso contrário
Protótipo unsigned short toupper (char personagem);
Descrição Se o caráter é uma letra minúscula (az), a função retorna uma maiúscula carta. Caso contrário, a função retorna um parâmetro de entrada inalterado.
Protótipo unsigned short tolower (char personagem);
Descrição Se o caráter é uma letra maiúscula (AZ), a função retorna uma minúscula deixe- ter. Caso contrário, a função retorna um parâmetro de entrada inalterado.
CAPÍTULO 7 Bibliotecas
isspace
isupper
isxdigit
toupper
tolower
mikroC PRO para PIC
566
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Biblioteca matemática ANSI C
A mikroC PRO para PIC fornece um conjunto de biblioteca padrão ANSI C funções para manipulação matemática de ponto flutuante.
Nota: Nem todas as funções padrão foram incluídos.
Nota: As funções têm sido quase sempre executado de acordo com os padrões ANSI C- dard, mas algumas funções têm sido modificados de modo a facilitar programa PIC- ming. Certifique-se de percorrer a descrição antes de usar funções C padrão.
Funções da biblioteca
- - - - - - - - - - - - - - - - - - - - - -
acos asin atan atan2 ceil cos cosh eval_poly exp fabs andar frexp ldexp log log10 modf pow pecado sinh sqrt bronzeado tanh
Mikroelektronika - Soluções de software e hardware para o mundo embutido
567
www.mecatronicadegaragem.blogspot.com
Protótipo dupla atan2 (duplo y, dupla x);
Descrição Esta é a dois argumentos da função arco tangente. É semelhante ao cálculo do arco tangente y / x, exceto que os sinais de ambos argumentos são usados para determinar o quadrante do resultado e x é permitida a zero. O retorno valor está em
di Π Π (I l i )
Protótipo dupla asin (duplo x);
Descrição A função retorna o arco seno de parâmetro x, ou seja, o valor cujo seno é x. O parâmetro de entrada x deve estar entre -1 e 1 (inclusive). O retorno valor é em radianos, entre-Π / 2 eΠ / 2 (inclusive).
Protótipo dupla acos (double x);
Descrição Função retorna o arco cosseno de parâmetro x, ou seja, o valor cujo cosseno é x. O parâmetro de entrada x deve estar entre -1 e 1 (inclusive). A retorno valor é em radianos entre 0 e Π (Inclusive).
Protótipo dupla atan (double f);
Descrição Função calcula o arco tangente de parâmetro f, isto é, o valor cujo tan- gent é f. O valor de retorno é em radianos entre-Π / 2 e Π / 2 (Inclusive).
Protótipo dupla cos (double f);
Descrição A função retorna o cosseno de f em radianos. O valor de retorno é de -1 a 1.
CAPÍTULO 7 Bibliotecas
acos
asin
atan
atan2
ceil
cos
mikroC PRO para PIC
568
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo dupla ceil (double x);
Descrição Função retorna o valor do parâmetro x arredondado para o próximo número i t i
www.mecatronicadegaragem.blogspot.com
Protótipo dupla frexp (duplo valor, int * Eptr);
Descrição Função divide um valor de ponto flutuante em uma fração normalizada e um integrante potência de 2. O valor de retorno é normalizado fração eo expoente inteiro é d bj d
Protótipo dupla cosh (duplo x);
Descrição A função retorna o cosseno hiperbólico de x, definida matematicamente como (Ex + e-x) / 2.
Se
Protótipo estático duplo eval_poly (duplo x, const dupla Código * d, int n);
Descrição Função polinómio Calcula para o número x, com coeficientes armazenados em d [], para
Protótipo dupla exp (double x);
Descrição A função retorna o valor de e - a base dos logaritmos naturais - levantadas para o poder x (ou seja, ex).
CAPÍTULO 7
mikroC PRO para PIC
cosh
eval_poly
exp
fabs
andar
frexp
ldexp
Bibliotecas
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
569
www.mecatronicadegaragem.blogspot.com
Protótipo dupla ldexp (duplo valor, int newexp);
Descrição Função retorna o resultado da multiplicação do número de ponto flutuante Num. por 2
Protótipo dupla fabs (double d);
Descrição A função retorna o valor (ou seja, positivo) absoluta de d.
Protótipo dupla andar (dupla x);
Descrição A função retorna o valor do parâmetro x arredondado para o número inteiro mais ó i
www.mecatronicadegaragem.blogspot.com
Protótipo dupla modf (duplo val, dupla * Iptr);
Descrição Retorna o argumento val divisão para a parte fracionária (função val ida e volta) e inteiro parte (em iptr número).
Protótipo dupla pow (double x, dupla y);
Descrição A função retorna o valor de x elevado à potência y (ou seja, xy). Se x é negativo, a função será automaticamente elenco y em unsigned long.
Protótipo dupla sinh (duplo x);
Descrição Função Retorna o seno hiperbólico de x, definida matematicamente como (Ex-e- x) / 2. Se o valor da x é muito grande (se ocorrer estouro), a função falha.
Protótipo dupla sqrt (double x);
Descrição A função retorna a raiz quadrada não negativa de x.
Protótipo dupla log (double x);
Descrição A função retorna o logaritmo natural de x (ou seja, loge (x)).
CAPÍTULO 7 Bibliotecas
log
log10
modf
pow
pecado
sinh
sqrt
mikroC PRO para PIC
570
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo dupla log10 (double x);
Descrição A função retorna o logaritmo de base 10 de x (ou seja, log10 (x)).
Protótipo dupla sin (double f);
Descrição A função retorna o seno de f em radianos. O valor de retorno é de -1 a 1.
www.mecatronicadegaragem.blogspot.com
Protótipo dupla tan (double x);
Descrição A função retorna a tangente de x em radianos. A retorno abrange o valor intervalo permitido de ponto flutuante no mikroC PRO para a PIC.
Protótipo dupla tanh (duplo x);
Descrição A função retorna a tangente hiperbólica de x, definida matematicamente como sinh (x) / cosh (x).
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
bronzeado
tanh
ANSI C Stdlib Biblioteca
A mikroC PRO para PIC fornece um conjunto de funções da biblioteca padrão ANSI C de utilidade geral.
Nota: Nem todas as funções padrão foram incluídos.
Nota: As funções têm sido quase sempre executado de acordo com o padrão ANSI C, mas certos funções foram alteradas a fim de facilitar a programação de PIC. Certifique-se de percorrer o descrição antes de usar funções C padrão.
Funções da biblioteca
- - - - - - - - - - - - -
abs atof atoi atol div ldiv uldiv laboratórios max min rand srand xtoi
Mikroelektronika - Soluções de software e hardware para o mundo embutido
571
www.mecatronicadegaragem.blogspot.com
Protótipo dupla atof (char * S)
Descrição
Função converte a seqüência de entrada s em um valor de precisão dupla e retorna o valor. Seqüência de entrada s deve estar em conformidade com o formato de ponto flutuante literal, com uma espaços opcionais no início. A seqüência será processada uma personagem ao mesmo tempo, até que a função atinge um personagem que ele não reconhece (inclu- ã t l )
Protótipo int atoi (char * S);
Descrição
Função converte a seqüência de entrada s em um valor inteiro e retorna o valor. A seqüência de entrada s deveria consistir exclusivamente de casas decimais, com um opcional branco e um sinal no início. A seqüência será processada uma ca- ter de cada vez, até o função atinge um personagem que não reconhece (I l i d t l )
Protótipo tempo atol (char * S)
Descrição
Função converte a seqüência de entrada s em um valor inteiro e retorna o valor. A seqüência de entrada s deve consistir exclusivamente de casas decimais, com espaços opcionais e um sinal no início. A seqüência será processada uma caracteres de cada vez, até que a função atinge um personagem que não reconhece Ni (i l i d t l )
Protótipo div_t div (int número, int denom);
Descrição Função calcula o resultado da divisão do numerador número por denom a- inator denom, a função retorna uma estrutura do tipo div_t compreendendo quociente (Quot) eo restante (REM), ver Div. Estruturas.
Protótipo int abs (int a);
Descrição A função retorna o valor (ou seja, positivo) absoluta de a.
CAPÍTULO 7 Bibliotecas
abs
atof
atoi
atol
div
mikroC PRO para PIC
572
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
Protótipo ldiv_t ldiv (long número, tempo denom);
Descrição
A função é semelhante à função div, exceto que os argumentos eo resultado membros de estrutura têm tipo tempo.
Função calcula o resultado da divisão do numerador número por denom a- inator denom, a função retorna uma estrutura do tipo ldiv_t compreendendo quo- paciente (quot) eo restante (REM), consulte Estruturas Div.
Protótipo uldiv_t uldiv (unsigned long número, unsigned long denom);
Descrição
A função é semelhante à função div, exceto que os argumentos eo resultado membros de estrutura têm tipo unsigned long.
Função calcula a resultado da divisão do numerador número por denom a- inator denom, a função retorna uma estrutura do tipo uldiv_t compreendendo quo- paciente (quot) eo restante (REM), ver Div. Estruturas.
Protótipo int rand ();
Descrição Função retorna um seqüência de números pseudo-aleatório entre 0 e 32767. A função será sempre produzir a mesma seqüência de números a menos srand é chamado para semear o ponto de partida.
Protótipo int max (int um, int b);
Descrição A função retorna maior dos dois inteiros, um e b.
CAPÍTULO 7
mikroC PRO para PIC
ldiv
uldiv
laboratórios
max
min
rand
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
573
www.mecatronicadegaragem.blogspot.com
Protótipo int min (int um, int b);
Descrição A função retorna menor dos dois números inteiros, um e b.
Protótipo tempo laboratórios (de longo x);
Descrição A função retorna o valor (ou seja, positivo) absoluta de inteiro longo x.
www.mecatronicadegaragem.blogspot.com
Protótipo não assinado xtoi (registo char * S);
Descrição
Função converte a seqüência de entrada s composto de dígitos hexadecimais em uma inte- ger valor. O parâmetro de entrada s deveria consistir exclusivamente de cavar hexadecimal seu, com um espaço em branco opcional e um sinal na início. A seqüência será processado um personagem de cada vez, até que a função atinge um personagem que não reconhece (incluindo um caractere nulo).
Protótipo vazio srand (unsigned x);
Descrição Função usa x como ponto de partida para uma nova seqüência de números pseudo-aleatórios- membros a ser devolvido por chamadas subseqüentes para rand. Nenhum valor é
d
CAPÍTULO 7 Bibliotecas
srand
xtoi
Div. Estruturas
typedef struct divstruct { int quot; int REM;
Div_t};
typedef struct ldivstruct { tempo quot; tempo REM;
Ldiv_t};
typedef struct uldivstruct { unsigned long quot; unsigned long REM;
Uldiv_t};
mikroC PRO para PIC
574
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Biblioteca C ANSI String
A mikroC PRO para PIC fornece um conjunto de funções da biblioteca padrão ANSI C útil para manipular strings e memória RAM.
Nota: Nem todas as funções padrão foram incluídos.
Nota: Funções têm sido maioritariamente implementados de acordo com o padrão ANSI C, mas algumas funções têm sido modificados de modo a facilitar a programação de PIC. Seja Certifique-se de percorrer a descrição antes de usar funções C padrão.
Funções da biblioteca
- - - - - - - - - - - - - - - - - -
memchr memcmp memcpy memmove memset strcat strchr strcmp strcpy strlen strncat strncpy strspn strncmp strstr strcspn strpbrk strrchr
Mikroelektronika - Soluções de software e hardware para o mundo embutido
575
www.mecatronicadegaragem.blogspot.com
Protótipo vazio * Memchr (void * P, char n, unsigned int v);
Descrição
Função localiza a primeira ocorrência de n em inicial v bytes da área de memória iniciando no endereço p. A função retorna o ponteiro para esse local ou 0 se o n não foi encontrado. Para o parâmetro p você pode usar um valor numérico (literal / / variável constante) indicando o endereço de memória ou dereferenced valor de um objeto, por exemplo i
Protótipo int memcmp (void * S1, vazio * S2, int n);
Descrição
Função compara o primeiro n caracteres de objetos apontados por s1 e s2 e retorna zero se os objetos são iguais, ou retorna a diferença entre a diferença do primeiro causador da interferência caracteres (em uma avaliação da esquerda para a direita). Assim o resultado é maior que zero se o objeto apontado por s1 é maior
Protótipo vazio * Memcpy (void * D1, vazio * S1, int n);
Descrição cópias Função n caracteres do objeto apontado por s1 para o objeto de ponto ed pelo d1. Se a cópia ocorre entre os objetos que se sobrepõem, o comportamento é indefinido A função retorna endereço do objeto apontado por d1
Protótipo vazio * Memmove (void * A, vazio * A partir de, registo int n);
Descrição cópias Função n caracteres do objeto apontado por a partir de para o objeto apontado por para. Ao contrário memcpy, as áreas de memória para e a partir de podem se sobrepor. A f ã t d d bj t t d
Protótipo vazio * Memset (void * P1, char personagem, int n)
Descrição função copia o valor da caráter em cada um dos primeiros n caracteres o objeto apontado por p1. A função retorna endereço do objeto apontado por p1.
CAPÍTULO 7 Bibliotecas
memchr
memcmp
memcpy
memmove
memset
mikroC PRO para PIC
576
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo char * Strcat (char * A, char * A partir de);
Descrição
Função anexa uma cópia da string a partir de para a cadeia para, substituindo o nulo personagem no final da para. Então, um caractere nulo de terminação é adicionado à resultado. Se a cópia ocorre entre os objetos que se sobrepõem, o comportamento é unde- multado. para cadeia deve ter espaço suficiente para armazenar o resultado. A função retorna
Protótipo char * Strchr (char * Ptr, char CDH);
Descrição Função localiza a primeira ocorrência do caractere chr na seqüência ptr. A fun- ção retorna um ponteiro para a primeira ocorrência de caráter chr, ou um ponteiro nulo se chr não ocorre no ptr. O caractere nulo de terminação é considerado um parte da cadeia
Protótipo int strcmp (char * S1, char * S2);
Descrição Função compara strings s1 e s2 e retorna zero se o seqüências são iguais, ou retorna uma diferença entre os primeiros caracteres diferentes (em um ava da esquerda para a direita ation). Assim, o resultado é maior que zero se s1 é maior do que s2 e vice-
Protótipo char * Strcpy (char * A, char * A partir de);
Descrição função copia a string a partir de na seqüência para. Se a cópia for bem sucedida, o retorna a função. Se a cópia ocorre entre os objetos que se sobrepõem, o
CAPÍTULO 7
mikroC PRO para PIC
strcat
strchr
strcmp
strcpy
strlen
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
577
www.mecatronicadegaragem.blogspot.com
Protótipo int strlen (char * S);
Descrição Função retorna o comprimento da corda s (O caractere nulo final não imputados comprimento da corda é).
www.mecatronicadegaragem.blogspot.com
Protótipo int strncmp (char * S1, char * S2, char len);
Descrição
Função lexicographically compara não superior a len (caracteres que seguem o caractere nulo não comparados) da string apontada por s1 para a string apontada por s2. A função retorna um valor que indica o s1 e s2 relação:
Valor Significado <0 s1 "menor que" s2 = 0 s1 "igual" s2 > 0 s1 "maior que" s2
Protótipo char * Strncat (char * A, char * A partir de, int tamanho);
Descrição Função não acrescenta mais do que tamanho caracteres da string a partir de para para. A caráter inicial da a partir de substitui o caractere nulo no final do para. O termi- caractere nulo de NAT é sempre anexado ao resultado. A função retorna para.
Protótipo char * Strncpy (char * A, char * A partir de, int tamanho);
Descrição cópias de função não superior a tamanho caracteres da string a partir de para para. Se copiar ING tem lugar entre os objetos que se sobrepõem, o comportamento é indefinido. Se a partir de é d t id t á f hid
Protótipo int strspn (char * Str1, char * Str2);
Descrição Função retorna o comprimento do segmento inicial máximo de str1 que consiste inteiramente de caracteres str2. O caracter nulo que encerra no final do string não é comparado.
CAPÍTULO 7 Bibliotecas
strncat
strncpy
strspn
strncmp
mikroC PRO para PIC
578
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo char * Strcspn (char * S1, char * S2);
Descrição
Função calcula o comprimento do segmento inicial máximo do ponto de cordas ed pelo s1 que consiste inteiramente de caracteres que não estão na cadeia de caracteres apontada pelo s2.
A função retorna o comprimento do segmento inicial
Protótipo char * Strstr (char * S1, char * S2);
Descrição
Função localiza a primeira ocorrência da string s2 em a cadeia s1 (Excluindo o caractere nulo de terminação).
A função retorna ponteiro para a primeira ocorrência de s2 em s1; se a string foi
encontrada
Protótipo char * Strrchr (char * Ptr, unsigned int CDH);
Descrição Função de procura na string ptr para a ocorrência do caractere chr. A caractere nulo de terminação ptr não está incluído na pesquisa. A função retorna ponteiro para o último chr encontrada em ptr, se nenhuma correspondência caractere foi encontrado, a função retorna 0
Protótipo char * Strpbrk (char * S1, char * S2);
Descrição Função procura s1 para a primeira ocorrência de qualquer caractere da seqüência s2. O caractere nulo final não está incluído na pesquisa. A função retorna ponteiro para o caractere correspondente na s1. Se s1 não contém caracteres de s2, o função retorna 0.
CAPÍTULO 7
mikroC PRO para PIC
strstr
strcspn
strpbrk
strrchr
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
579
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
BIBLIOTECAS DIVERSAS
- Biblioteca Button - Conversões Biblioteca - Sprint Biblioteca - Setjmp Biblioteca - Time Library - Trigonometria Biblioteca
mikroC PRO para PIC
580
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Button (unsigned short * Porto, unsigned short pino, unsigned short tempo, unsigned short active_state);
Retorna Retorna 0 ou 255.
Descrição
Função elimina a influência de cintilação contato após pressionar um botão (Debouncing).
Parâmetro porto especifica a localização do botão; parâmetro pinos é o pino número do designado porto e vai de 0 .. 7; parâmetro tempo é um debounce período em milissegundos; parâmetro active_state pode ser 0 ou 1, e deter- minas se o botão está ativo em zero lógica ou lógica.
Requer Button pino deve ser configurado como entrada.
Exemplo
Exemplo lê RB0, para que o botão é ligado, na transição de 1-0 (Liberação de botão), PORTD é invertida:
fazer { se (Button (& PORTB, 0, 1, 1)) oldstate = 1; se (Oldstate Button & & (& PORTB, 0, 1, 0)) {
PORTD = ~ PORTD; oldstate = 0;
} } while (1);
CAPÍTULO 7
mikroC PRO para PIC
BOTÃO DE BIBLIOTECA
A biblioteca contém rotinas Button miscelânea útil para o desenvolvimento do projeto.
Rotinas da biblioteca
- Button
Button
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
581
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
CONVERSÕES DE BIBLIOTECA A mikroC PRO para PIC Conversões Biblioteca disponibiliza rotinas para numerais para cordas e BCD / conversões decimal. Rotinas da biblioteca Você pode obter representação de texto do valor numérico passando-a para um dos follow- ing rotinas:
- - - - - - -
ByteToStr ShortToStr WordToStr IntToStr LongToStr LongWordToStr FloatToStr
As seguintes funções converter valores decimais em BCD e vice-versa:
- Dec2Bcd - Bcd2Dec16 - Dec2Bcd16
582
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio ShortToStr (curto entrada, char * Saída);
Retorna Nada.
Descrição
Converte entrada assinado pequeno número em uma string. A seqüência de saída tem de largura fixa de 5 caracteres, incluindo o caracter nulo no final (terminação de cadeia). A saída string é justificado à direita e posições restantes do lado esquerdo (se houver) são preenchidos com espaços em branco.
Parâmetros:
t d pequeno número a ser convertido
Requer string de destino deve ser de pelo menos 5 caracteres de comprimento.
Exemplo curto t = -24; char txt [5]; ... ShortToStr (t, txt) / / txt é "-24" (um branco aqui)
Protótipo vazio ByteToStr (unsigned short entrada, char * Saída);
Retorna Nada.
Descrição
Converte o byte de entrada para uma seqüência. A seqüência de saída tem de largura fixa de 4 caracteres incluindo nulo personagem no final (terminação de cadeia). A seqüência de saída é direito justificados e restantes posições à esquerda (se houver) são preenchidos com espaços em branco.
Parâmetros:
Requer string de destino deve ter no mínimo 4 caracteres de comprimento.
Exemplo unsigned short t = 24; char txt [4]; ... ByteToStr (t, txt) / / txt é "24" (um branco aqui)
CAPÍTULO 7
mikroC PRO para PIC
ByteToStr
ShortToStr
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
583
www.mecatronicadegaragem.blogspot.com
Protótipo vazio IntToStr (int entrada, char * Saída);
Retorna Nada.
Descrição
Converte entrada assinado número inteiro para uma string. A seqüência de saída tem de largura fixa de 7 caracteres, incluindo o caracter nulo no final (terminação de cadeia). A saída string é justificado à direita e as posições restantes do lado esquerdo (Se houver) são preenchidos com espaços em branco.
Parâmetros:
t d número inteiro assinado a ser convertido
Requer string de destino deve ser de pelo menos sete caracteres de comprimento.
Exemplo int j = -4220; char txt [7]; ... IntToStr (j, txt) / / txt é "-4220" (em branco aqui)
Protótipo vazio WordToStr (unsigned entrada, char * Saída);
Retorna Nada.
Descrição
Converte palavra de entrada em uma seqüência. A seqüência de saída tem de
largura fixa de 6 caracteres incluindo o caractere nulo no final (string terminação). A seqüência de saída é direito justificadas e as posições restantes do lado esquerdo (se houver) são preenchidos com espaços em branco.
Parâmetros:
t d palavra a ser convertida
Requer string de destino deve ser de pelo menos 6 caracteres de comprimento.
Exemplo não assinado t = 437; char txt [6]; ... WordToStr (t, txt) / / txt é "437" (dois espaços em branco aqui)
CAPÍTULO 7 Bibliotecas
WordToStr
IntToStr
mikroC PRO para PIC
584
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio LongToStr (long entrada, char * Saída);
Retorna Nada.
Descrição
Converte entrada assinado longo número inteiro para uma string. A seqüência de saída tenha sido fixada largura de 12 caracteres, incluindo o caracter nulo no final (terminação de cadeia). A seqüência de saída está justificado a direita e as posições restantes do lado esquerdo (se houver) preenchido com espaços em branco.
Parâmetros:
t d i d ú i t i l tid
Requer string de destino deve ser de pelo menos 12 caracteres de comprimento.
Exemplo
tempo jj = -3700000; char txt [12]; ... LongToStr (txt, jj); / / txt é "-3700000" (três espaços em branco aqui)
Protótipo vazio LongWordToStr (unsigned long entrada, char * Saída);
Retorna Nada.
Descrição
Converte um número inteiro de entrada unsigned long para uma string. A seqüência de saída tem largura fixa de 11 caracteres incluindo o caractere nulo no final (terminação de cadeia). A seqüência de saída é justificado à direita e as posições restantes do lado esquerdo (se houver) são preenchidos com espaços em branco.
Parâmetros:
t d número inteiro sem sinal por muito tempo para ser convertido
Requer string de destino deve ter pelo menos 11 caracteres de comprimento.
Exemplo
unsigned long jj = 3700000; char txt [11]; ... LongToStr (txt, jj); / / Txt é "3700000" (três espaços em branco aqui)
CAPÍTULO 7
mikroC PRO para PIC
LongintToStr
LongWordToStr
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
585
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned char FloatToStr (float fnum, unsigned char * Str);
Retorna - 3 se o número de entrada é NaN 2 - se o número de entrada é-INF - 1 se o número de entrada é INF + - 0 se a conversão foi bem-sucedida
Descrição
Converte uma variável número do ponto em uma string.
Parâmetros:
- entrada: número de ponto flutuante para ser convertido - saída: string de destino
A seqüência de saída é justificada à esquerda e nulos rescindido após o último
dígito.
Nota: maior número de ponto flutuante Dado será truncado para 7 dígitos
Requer string de destino deve ter pelo menos 14 caracteres de comprimento.
Exemplo
flutuar FF1 = -374,2; flutuar ff2 123,456789 =; flutuar ff3 0,000001234 =; char txt [15]; ... FloatToStr (FF1, txt); / / txt é "-374,2" FloatToStr (FF2, txt); / / txt é "123,4567" FloatToStr (ff3, txt); / / txt é "1.234e-6"
CAPÍTULO 7 Bibliotecas
FloatToStr
mikroC PRO para PIC
586
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo unsigned short Dec2Bcd (unsigned short decnum);
Retorna Convertido BCD valor.
Descrição
Converte um número inteiro de entrada unsigned short a sua representação BCD apro- ção.
Parâmetros:
d número inteiro curto sem sinal a ser convertido Requer Nada.
Exemplo unsigned short a, b; ... uma = 22; Dec2Bcd b = (a); / b igual a 34
Protótipo não assinado Bcd2Dec16 (unsigned bcdnum);
Retorna valor decimal de conversão.
Descrição
Converte 16 bits BCD numeral para seu equivalente decimal.
Parâmetros:
- bcdnum: 16 bits BCD numeral a ser convertido
Requer Nada.
Exemplo não assinado a, b; ... a = 0x1234 / / a é igual a 4660 b = Bcd2Dec16 (a), / b / é igual a 1234
CAPÍTULO 7
mikroC PRO para PIC
Dec2Bcd
Bcd2Dec16
Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
587
www.mecatronicadegaragem.blogspot.com
Protótipo não assinado Dec2Bcd16 (unsigned decnum);
Retorna Convertido valor BCD.
Descrição
Converte o valor decimal sem sinal de 16 bits para seu equivalente em BCD.
Parâmetros:
- decnum número de 16 bits sem sinal decimal a ser convertido
Requer Nada.
Exemplo não assinado a, b; ... = 2345 um; b = Dec2Bcd16 (a), / b / é igual a 9029
CAPÍTULO 7 Bibliotecas
Dec2Bcd16
mikroC PRO para PIC
588
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo vazio PrintOut (void (* Prntoutfunc) (char ch), const char F * ,...);
Retorna Nada.
Descrição
Imprimir é usado para formatar dados e imprimi-los de uma forma definida pelo usuário através de uma função de manipulador de impressão.
Parâmetros:
- prntoutfunc: função de manipulador de impressão - f: formato de string
A f argumento é uma seqüência de formato e pode ser composto de personagens,
escapar seqüências, e as especificações de formato. caracteres comuns e fugir seqüências são copiados para o manipulador de impressão na ordem em que são interpretado. Formato especificações sempre começam com um sinal de porcentagem (%) e exigem novos argumentos a serem incluídos na chamada de função.
A seqüência de formato é lido da esquerda para a direita. O encoun primeira
especificação de formato tered se refere ao primeiro argumento após o f parâmetro e, em seguida, converte e fora coloca-lo usando a especificação do formato. Os acessos segunda especificação de formato o segundo argumento, após f, e assim por diante. Se há mais argumentos que o formato especificações, os argumentos extras são ignorados. Os resultados são imprevisíveis, se houver não são argumentos suficientes para as especificações do formato As especificações do
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
IMPRESSÃO BIBLIOTECA
A mikroC PRO para PIC fornece os dados de rotina para PrintOut fácil formatação e impressão.
Nota: Biblioteca funciona com a família PIC18 só.
Rotinas da biblioteca
- Imprimir
Imprimir
Mikroelektronika - Soluções de software e hardware para o mundo embutido
589
www.mecatronicadegaragem.blogspot.com
conversion_type Argumento Ti
Formato de saída
d int Assinado número decimal
u unsigned int Unsigned número decimal
o unsigned int Unsigned número octal
x unsigned int Unsigned número hexadecimal usando 0123456789ABCDEF
X unsigned int Unsigned número hexadecimal usando 0123456789ABCEDF
f dupla Número de ponto flutuante usando o formato [-
e dupla Número de ponto flutuante usando o formato [-
E dupla Número de ponto flutuante usando o
formato [-
g dupla Número de ponto flutuante usando E ou F formato, o que é mais compacto para o valor especificado e precisão
c int int é convertido para um unsigned char, eo caráter resultante é escrito
s Char * String com um caractere nulo de t i ã p void * valor do ponteiro, o formato de X é usado
% <none> A% é escrito. Nenhum argumento é convertido. A especificação completa conversão d %%
CAPÍTULO 7 Bibliotecas
Descrição
mikroC PRO para PIC
590
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
A bandeiras campo é onde um único caractere é usado para justificar a saída e imprimir sinais + / - e espaços em branco e os pontos decimais, e prefixos octal e hexadecimal, como mostrados na tabela a seguir.
A largura campo é um número não negativo que especifica o número mínimo de caracteres impressos. Se um número de caracteres no valor de saída é menor que a largura, espaços em branco são adicionados à esquerda ou à direita (quando o - sinalizador é especificado), a fim de pad a largura mínima. Se a largura for prefixado com 0, então os zeros são preenchidos em vez de espaços em branco. A largura campo nunca trunca um campo. Se o comprimento do out- valor colocado exceder a largura especificada, todas as personagens são saída.
Descrição A precisão campo é um número não negativo que especifica o número de ca-
acters imprimir, o número de dígitos significativos, ou o número de casas decimais. Os pré- campo de cisão pode causar truncamento ou o arredondamento do valor da produção em o caso de um número de ponto flutuante, conforme especificado na tabela a seguir.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
bandeir
MeaningMeaning da precisão campo
d, u, o,
x, X
O campo de precisão é onde você especifica o número mínimo de dígitos que serão incluídos no valor da saída. Dígitos não são trun- cado se o número de dígitos em um argumento excede o definido na precisão de campo. Se o número de dígitos do argumento é menor que o campo de precisão, o valor de saída é preenchido na esquerda com zeros.
f O campo de precisão é onde você especifica o número de dígitos à direita do ponto decimal. O último dígito é arredondados.
e, E O campo de precisão é onde você especifica o número de dígitos à direita do ponto decimal. O último dígito é arredondado.
g O campo de precisão é onde você especifica o número máximo de algarismos significativos no valor de saída.
c, C A campo de precisão não tem efeito sobre esses tipos de campos.
s O campo de precisão é onde você especifica o número máximo de caracteres no valor de saída. Excesso de caracteres não são
bandeir
Significado + Esquerda justificar a saída no campo especificado largura. - Prefixo o valor de saída com sinal + ou - se a saída é um tipo de
espaço ('')
Prefixo o valor de saída com um branco se for assinado um valor positivo.
#
Prefixo de um valor de saída diferente de zero com 0, 0x ou 0X quando utilizado com o, x e X tipos de campo, respectivamente. Quando usado com o e, E, F e G, e G tipos de campo, o # sinalizador força o valor de saída para incluir um
d i l
* Ignorar especificador de formato.
591
www.mecatronicadegaragem.blogspot.com
Descrição
Os caracteres opcional l ou L pode preceder imediatamente conversion_type para respectivamente especificar as versões longas do tipo integer d, i, o, u, x, e X.
Você deve garantir que o tipo de argumento corresponde à da especificação de
formato ã V ê d ti d ld ti ti t é d
Requer Nada.
Exemplo
Imprimir arquivo exemplo mikroElektronika do cabeçalho para UART.
vazio PrintHandler (char c) {
UART1_Write (c);
}
vazio main () { UART1_Init (9600); Delay_ms (100);
PrintOut (PrintHandler ", / * \ r \ n" "* Nome do projeto: \ n \ r" "O uso PrintOutExample (Amostra
de PrintOut () função) \ r \ n " "Copyright *: \ n \ r" "Mikroelektronika (c),
2006. \ R \ n " "20060710: \ r \ n" - Versão inicial \ r \ n " "* Descrição: \ n \ r" "Simples demonstração sobre o uso
da impressão () função \ n \ r " "* Teste de configuração: \ r \ n" "MCU:
PIC18F8520 \ r \ n " "Dev.Board: n BigPIC5 r \ \" "Oscilador: HS,
10.3fMHz% \ r \ n " "Ext Módulos: Nenhuma. \ R \ n". "SW: mikroC PRO
PIC para \ r \ n " "NOTAS *: \ n \ r" "Nenhuma. \ R \ n" "* / \ N \ r", Get_Fosc_kHz () / 1000).;
}
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
592
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Setjmp BIBLIOTECA
Esta biblioteca contém funções e definições de tipos para ignorar a chamada de função normal e retorno da disciplina. O tipo de declaração é jmp_buf que é um tipo de matriz adequada para a realização da in- as informações necessárias para restaurar um ambiente de chamada.
Tipo de declaração está contida em sejmp16.h e arquivos de cabeçalho setjmp18.h para PIC16 e PIC18 fam- ily MCUs respectivamente. Estes cabeçalhos podem ser encontrados na pasta de inclusão do compilador. A execução do implementação desta biblioteca é diferente para PIC16 e PIC18 MCUs da família. Para a família PIC16 setjmp e longjmp são implementadas como macros definidas no arquivo de cabeçalho setjmp16.h e para a família PIC18 como funções definidas no arquivo de biblioteca setjmp.
Nota: Devido a PIC16 família específica de não ser capaz de ler / escrever pilha ponteiro, o programa de exe- cução após ivocation longjmp ocorre depende o conteúdo da pilha. É por isso que, para PIC16 fam- ily apenas, a execução de funções setjmp e longjmp não é padrão ANSI C complacente.
Rotinas da biblioteca
- Setjmp - Longjmp
Setjmp
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo int setjmp (jmp_buf env);
Retorna se o retorno é de invocação de dirigi-lo retorna 0 se o retorno é de uma chamada para o longjmp ele retorna valor diferente de zero
Descrição Essa função salva chamando posição no jmp_buf para uso posterior pelo longjmp. A parâmetro env: matriz do tipo (jmp_buf) suitible para a realização da necessidade de informações ed para o restabelecimento do ambiente de chamada
Requer Nada.
Exemplo setjmp (buf);
593
www.mecatronicadegaragem.blogspot.com
Protótipo vazio longjmp (jmp_buf env, val int);
Retorna setjmp causas longjmp para retornar Val, se val for 0 significa que vai retornar 1.
Descrição
Restaura ambiente de chamada salvo em jmp_buf pela invocação mais recente setjmp macro. Se não houve tal invocação ou função conatinig a invo- cação setjmp terminou nesse ínterim, o comportamento é undefined.Param- eter matriz do tipo (jmp_buf) que detém as informações salvas pelo correspondente: env i ã tj
Requer Invocação de longjmp deve ocorrer antes do retorno da função em que Setjmp encontros foi chamado.
Exemplo longjmp (buf, 2);
CAPÍTULO 7 Bibliotecas
Longjmp
mikroC PRO para PIC
594
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Exemplo Biblioteca
Exemplo demonstra cruz função de chamada usando funções setjmp e longjmp. Quando chamado, setjmp () salva o seu ambiente de chamada em sua argumentação jmp_buf para mais tarde utilização pelo longjmp (). Longjmp (), por outro lado, restaura o ambiente salvos pela invocação mais recente do setjmp () com o correspondente jmp_buf argumento. O exemplo dado é para P16. # Include <Setjmp16.h>
# Include <Setjmp16.h>
buf jmp_buf;
/ / Nota: diagramas de fluxo de programas estão indexados
de acordo / / Para a sequência de execução
vazio func33 () {
asm nop; longjmp (buf, 2); asm nop;
}
vazio func () {
PORTB = 3; se (Buf setjmp () == 2)
PORTB = 1; mais
func33 (); asm nop;
}
vazio main () {
PORTB = 0; TRISB = 0;
asm nop;
func ();
asm nop;
}
/ / 2 <----------| / / | / / | / / 3 -------------->| / / | | / / | | / / | | / / | | / / 1 <------ | | | / / | | | / / | | | / / 3 <--------------| / / 4 -> | | | / / | | | / / 2 ---------->| / / | | / / 4 <- | | / / 5 -------|------> depende na pilha o conteúdo / / | / / | / / | / / | / / | / / | / / | / / | / / 1 ------>| / / / /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
595
www.mecatronicadegaragem.blogspot.com
Protótipo sprintf (char * Wh, const char F * ,...);
Retorna A função retorna o número de caracteres realmente escrito o destino string.
Descrição
sprintf é usado para formatar dados e imprimi-los em seqüência destino.
Parâmetros:
- wh: string de destino - f: formato de string
A f argumento é uma seqüência de formato e pode ser composto de personagens,
escapar seqüências, e as especificações de formato. caracteres comuns e fugir seqüências são copiados para a seqüência de destino na ordem em que eles estão inter- interpretados. Formato especificações sempre começam com um sinal de porcentagem (%) e requerem argumentos adicionais para ser incluído na chamada de função.
A seqüência de formato é lido da esquerda para a direita. O encoun primeira
especificação de formato tered se refere ao primeiro argumento após f e depois converte-lo usando e saídas a especificação do formato. O segundo formato acessa o segundo especificação argumento após f, e assim por diante. Se há mais argumentos que especificações de formato õ t t t ã i d O lt d ã i i í i
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
SPRINT BIBLIOTECA
A mikroC PRO para PIC estabelece o padrão ANSI C função sprintf para formatar os dados fácil.
Nota: Para além do padrão ANSI C, a Biblioteca Sprint também inclui duas versões limitadas do sprintf função (sprinti e sprintl). Estas funções recebem menos ROM e RAM e pode ser mais conveniente para o uso em alguns casos.
Funções
- Sprintf - Sprintl - Sprinti
sprintf
596
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
conversion_type Argumento Ti
Formato de saída
d int Assinado número decimal
u unsigned int Unsigned número decimal
o unsigned int Unsigned número octal
x unsigned int Unsigned número hexadecimal usando 0123456789ABCDEF
X unsigned int Unsigned hexadecimal número usando 0123456789ABCEDF
f dupla Número de ponto flutuante usando o formato [- ] Dddd dddd
e dupla Número de ponto flutuante usando o formato [-
E dupla Número de ponto flutuante usando o
formato [-
g dupla De ponto flutuante Número usando E ou F formato, o que é mais compacto para o valor especificado e precisão
c int int é convertido para um unsigned char, eo caráter resultante é escrito
s Char * String com um caractere nulo de t i ã p void * Ponteiro valor, o formato de X é usado
% <none> A% é escrito. Nenhum argumento é convertido. A especificação completa conversão
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Cada campo na especificação do formato pode ser um único caractere ou um número que Especifica uma opção de formato específico. A conversion_type campo é onde um único caráter especifica que o argumento é interpretado como um personagem, cordas, nú- ber, ou ponteiro, como mostrado na tabela a seguir:
Descrição
Mikroelektronika - Soluções de software e hardware para o mundo embutido
597
www.mecatronicadegaragem.blogspot.com
bandeir
MeaningMeaning do precisão campo
d, u, o,
x, X
A precisão campo é onde você especifica o número mínimo de dígitos que serão incluídos no valor da saída. Dígitos não são trun- cado se o número de dígitos em um argumento excede o definido no campo de precisão. Se o número de dígitos do argumento é menor que o campo de precisão, o valor de saída é preenchido na esquerda com zeros.
f O campo de precisão é onde você especifica o número de dígitos à direita do ponto decimal. O último dígito é arredondado.
e, E O campo de precisão é onde você especifica o número de dígitos à direita do ponto decimal. O último dígito é arredondado.
g O campo de precisão é onde você especifica o número máximo de algarismos significativos no valor de saída.
c, C O campo de precisão não tem efeito sobre esses tipos de campos.
s O campo de precisão é onde você especifica o número máximo de caracteres no valor de saída. Excesso de caracteres não são
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
A bandeiras campo é onde um único caractere é usado para justificar a saída e imprimir sinais + / - e espaços em branco e os pontos decimais, e prefixos octal e hexadecimal, como mostra a tabela a seguir.
A largura campo é um número não negativo que especifica o número mínimo de caracteres impressos. Se um número de caracteres no valor de saída é menor que a largura, espaços em branco são adicionados à esquerda ou à direita (quando a opção - é especificado), a fim de bloco a largura mínima. Se a largura for prefixado com 0, então os zeros são preenchidos em vez de espaços em branco. A largura campo nunca trunca um campo. Se o comprimento do out- valor colocado exceder a largura especificada, todas as personagens estão de saída.
Descrição A precisão campo é um número não negativo que especifica o número de ca-
acters imprimir, o número de dígitos significativos, ou o número de casas decimais. Os pré- campo de cisão pode causar truncamento ou o arredondamento do valor da produção no caso de um número de ponto flutuante, conforme especificado no tabela a seguir.
598
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
bandeir
Significado + Esquerda justificar a saída da largura do campo especificado. - Prefixo valor de saída com sinal + ou - se o saída é um tipo de
espaço ('')
Prefixo o valor de saída com um branco se for assinado um valor positivo.
#
Prefixo de um valor de saída diferente de zero com 0, 0x ou 0X quando utilizado com o, x e X tipos de campo, respectivamente. Quando utilizado com o e, E, F e G, e G tipos de campo, o # sinalizador força o valor de saída para incluir um
t d i l
* Ignorar especificador de formato.
www.mecatronicadegaragem.blogspot.com
Protótipo sprintl (char * Wh, const char F * ,...);
Retorna A função retorna o número de caracteres realmente escrito o destino string.
Descrição O mesmo que sprintf, exceto que ele não suporta números tipo float.
Protótipo sprinti (char * Wh, const char F * ,...);
Retorna A função retorna o número de caracteres realmente escrito o destino string.
Descrição O mesmo que sprintf, exceto que não apoio inteiros longos e num tipo float- bros.
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Os caracteres opcional l ou L pode preceder imediatamente conversion_type para respectivamente especificar as versões longas do tipo integer d, i, o, u, x, e X.
Descrição Você deve garantir que a tipo de argumento corresponde ao da especificação do formato. Você pode usar o tipo de moldes para garantir que o tipo correto é passado para sprintf.
sprintl
sprinti
Mikroelektronika - Software e Soluções de hardware para Embedded World
599
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas mikroC PRO para PIC
Exemplo Biblioteca Esta é uma demonstração do padrão de uso sprintf biblioteca C rotina. Três dife- ent representações do mesmo número de poing flutuantes obtidas usando o sprintf rotina são enviados via UART. dupla ww =-1.2587538e 1; char buffer [15];
/ / Função para enviar cadeia para UART vazio UartWriteText (char * Txt) {
while (* txt) UART1_Write (* txt + +);
}
/ / Função para enviar const string para UART vazio UartWriteConstText (const char * Txt) {
while (* txt) UART1_Write (* txt + +);
}
vazio main () {
UART1_Init (4800); Delay_ms (10);
/ / Inicializa o módulo UART em 4800 bps
UartWriteConstText ("Floating
ponto
número
representação ");
/ /
Escrever mensagens no UART
sprintf (buffer, "% 12e" ww); / / ww formato e armazená-lo para tamponar UartWriteConstText ("\ formato r \ ne:"); / / Escreve mensagem no UART UartWriteText (buffer); / / Escreve no buffer UART
sprintf (buffer, "% 12f" ww); / / ww formato e armazená-lo para tamponar UartWriteConstText ("\ r nf \ formato:"); / / Escreve mensagem no UART UartWriteText (buffer); / / Escreve no buffer UART
sprintf (buffer, "% 12g" ww); / / ww formato e armazená-lo para tamponar UartWriteConstText ("\ formato r \ ng:"); / / Escreve mensagem no UART UartWriteText (buffer); / / Escreve no buffer UART
}
600
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Time Library
A Biblioteca Time contém funções e definições de tipo para cálculos de tempo no UNIX formato de tempo que conta o número de segundos desde o "Época". Esta é muito conveniente para os programas que funcionam com intervalos de tempo: a diferença entre dois valores de tempo UNIX é um tempo real diferença medido em segundos.
Qual é a época? Originalmente ele foi definido como o início de 1970 GMT. (Janeiro 1, 1970 dia juliano ) GMT, Greenwich Mean Time, é um termo tradicional para o fuso horário da Inglaterra.
A TimeStruct tipo é um tipo de estrutura adequada para o armazenamento e data. Tipo declaração está contida em timelib.h que pode ser encontrado no mikroC PRO para PIC Time Library pasta exemplo Demo.
Rotinas da biblioteca
- Time_dateToEpoch - Time_epochToDate - Time_dateDiff
Mikroelektronika - Soluções de software e hardware para o mundo embutido
601
www.mecatronicadegaragem.blogspot.com
Protótipo vazio Time_epochToDate (long e, TimeStruct * Ts);
Retorna Nada.
Descrição
Converte o tempo Unix para data e hora.
Parâmetros:
- e: tempo unix (Segundos desde a época Unix) - TS: data e hora estrutura para armazenar a saída de conversão
Requer Nada.
Exemplo
# Include "timelib.h" ... TimeStruct ts2; tempo época; ... / * * Que data é 1234567890 época? * /
época = 1234567890; Time_epochToDate (da época, e TS2);
Protótipo tempo Time_dateToEpoch (TimeStruct * Ts);
Retorna Número de segundos desde 1 de janeiro de 1970 0h00mn00s.
Descrição
Esta função retorna o tempo unix: número de segundos desde 1 de janeiro de 1970 0h00mn00s.
Parâmetros:
- ts: tempo e valor de data para o cálculo de tempo Unix.
Requer Nada.
Exemplo
# Include "timelib.h" ... TimeStruct TS1; tempo época; ... / * * Qual é a época da data em st? * /
= Time_dateToEpoch época (e TS1);
CAPÍTULO 7 Bibliotecas
Time_dateToEpoch
Time_epochToDate
mikroC PRO para PIC
602
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo tempo Time_dateDiff (TimeStruct * t1, TimeStruct * t2);
Retorna Diferença de tempo em segundos como um long assinado.
Descrição
Essa função compara duas datas e retorna diferença de segundos como um assinado prazo. O resultado é positivo se t1 é antes t2 resultado, é nulo se t1 é o mesmo que t2 eo resultado é negativo se t1 é depois t2.
Parâmetros:
- t1: data e hora estrutura (o primeiro parâmetro de comparação) - t2: data e hora estrutura (o segundo parâmetro de comparação)
Nota: Esta função é implementada como macro no arquivo de cabeçalho que
Requer Nada.
Exemplo
# Include "timelib.h" ... TimeStruct TS1, TS2; tempo diff; ... / * * Quantos segundos entre estas duas datas contidas no TS1 e
ts2 amortecedores? * / Time_dateDiff diff = (& TS1, TS2 &);
CAPÍTULO 7
mikroC PRO para PIC
Time_dateDiff
Bibliotecas
Mikroelektronika - Softwares e soluções de hardware para Embedded World
603
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7 Bibliotecas
Exemplo Biblioteca Este exemplo demonstra o tempo de uso da Biblioteca.
mikroC PRO para PIC
# Include
"Timelib.h"
TimeStruct TS1, TS2; tempo época; tempo diff;
vazio main () {
ts1.ss = 0; ts1.mn = 7; ts1.hh = 17; ts1.md = 23; ts1.mo = 5; ts1.yy = 2006;
/ * * Qual é a época da data em st? * /
= Time_dateToEpoch época (e TS1);
/ * * Qual é a data 1234567890 época? * /
época = 1234567890; Time_epochToDate (da época, e TS2);
/ * * Como segundo muito entre estas duas datas? * /
Time_dateDiff diff = (& TS1, TS2 &); }
604
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Protótipo int sinE3 (unsigned angle_deg);
Retorna A função retorna o seno do parâmetro de entrada.
Descrição
A função calcula seno multiplicado por 1000 e arredondados para o número inteiro mais próximo:
resultado: = rodada (* sin (angle_deg) 1000)
Parâmetros:
- angle_deg: Ângulo de entrada em graus
Nota: faixa de valor de retorno: 1000 1000 Requer Nada.
Exemplo int res; ... res = sinE3 (45); / / resultado é 707
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Trigonometria BIBLIOTECA
A mikroC PRO para PIC implementa funções trigonométricas fundamentais. Essas funções são implementadas como tabelas de consulta. funções trigonométricas são implementadas em formato de número inteiro, a fim para economizar memória.
Rotinas da biblioteca
- SinE3 - CosE3
sinE3
Mikroelektronika - Soluções de software e hardware para o mundo embutido
605
www.mecatronicadegaragem.blogspot.com
Protótipo int cosE3 (unsigned angle_deg);
Retorna A função retorna o cosseno de parâmetro de entrada.
Descrição
A função calcula seno multiplicado por 1000 e arredondados para o inteiro:
resultado: = rodada (cos (angle_deg) * 1000)
Parâmetros:
- angle_deg: Ângulo de entrada em graus
Nota: faixa de valor de retorno: -1000 .. 1000.
Requer Nada.
Exemplo int res; ... res = cosE3 (196); / / resultado é -193
CAPÍTULO 7 Bibliotecas
cosE3
mikroC PRO para PIC
606
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
Mikroelektronika - Soluções de software e hardware para o mundo embutido
607
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com
Top Related